前言

本文内容基于我的《Web应用安全入门》公开课视频。

Prompt:下面是一篇课程音频转录后的文本,请把它转成老师和学生对话形式的文本,要求遵循原文结构,语言衔接流畅,保持 Markdown 结构。

目录

  • Web安全是什么(20min)
  • Web安全漏洞分类(40min)
  • 如何评估漏洞危害(15min)
  • 我们能做什么(15min)

老师: 好,我们开始。我先做个自我介绍,我是experdot,今天给大家做一场Web应用安全的分享,本次演示是用白板而不是PPT,白板的好处是可以写写画画,我可以这样涂画,大家听课的话也更轻松一点。

老师: 我们看一下本次Web应用安全课程的目录,总共分4个章节,第一个章节是讲Web安全是什么,我们首先要搞清楚Web安全的本质。第二个是讲一些常见的Web安全漏洞,也就是有一些常规的分类。第三个是当我们在产品中遇到Web安全漏洞时,怎么评估它的危害。最后是讲,在日常工作中,我们应该怎么做来保证Web应用的安全。

老师: 有没有同学有什么问题?

学生: 老师,这个课程是针对什么人群的?我们需要有什么基础知识吗?

老师: 这是个入门课程,针对所有对Web应用安全感兴趣的人,不管你是开发者,测试者,运维者,还是项目经理,都可以从中学到一些基本的概念和方法。我们不需要有太多的专业知识,只要你对Web应用有一些了解,比如说什么是HTTP协议,什么是前端和后端,什么是数据库,什么是cookie,就可以了。如果你不太清楚,也没关系,我会尽量用简单的语言和例子来解释。

学生: 好的,谢谢老师。

老师: 不客气,那我们开始第一个章节——Web安全是什么?

一. Web安全是什么

老师: 这个章节相当轻松,我们从现实中去考虑,安全是什么。你查词典的话,它的定义是人没有威胁,也就是说一个人没有危险,它是安全。那么人有哪些危险?我们看第一小节。

01. 人的安全需求

  • 野兽 房屋
  • 寒冷 衣物
  • 病毒 皮肤

老师: 请看这个页面,一个原始人在野外生存,他可能会遇到野兽,也可能在冬天遭遇寒冷,也可能遇到生物界里面的病毒,病毒入侵了他的体内人就会生病。这就是人会遇到的几种常规危险。

老师: 我们有危险就有相应的防护措施,那就是用房屋来保护野兽的侵袭,然后用衣物保温,再用皮肤抵御病毒,皮肤是人体免疫系统的第一道防线。关于这点,大家有问题吗?

学生A: 老师,为什么要用房屋来保护野兽的侵袭呢?野兽不是应该用武器来对付吗?

老师: 这个问题很好,其实武器也是一种防护措施,但是武器有一个缺点,就是它需要你主动去攻击野兽,而且有可能会失败,而房屋的话,它是一种被动的防护措施,它可以让你隔绝野兽的视线,让你不被发现,或者让你有一个安全的避难所,这样就可以减少你和野兽的冲突,也可以减少你的危险。

学生A: 明白了,它们是主动与被动的区别,谢谢老师。

学生B: 老师,我想问一下,皮肤是怎么防护病毒的呢?病毒不是很小吗?它们不是可以穿过皮肤吗?

老师: 这个问题也很好,其实皮肤是人体最大的器官,它有很多功能,其中一个就是防护功能,它可以阻挡很多外界的微生物,比如细菌,真菌,寄生虫等等,它们都不能轻易地穿过皮肤,而病毒的话,它们虽然很小,但是它们也不能直接穿过健康的皮肤,它们需要借助一些途径,比如伤口,黏膜,或者是通过其他生物的媒介,比如蚊子,跳蚤等等,才能进入人体。总之皮肤是一种很有效的防护屏障,它可以减少病毒的入侵。

学生B: 懂了,谢谢老师。

老师: 不客气,那我们继续。我们做一个绘图,把这几个概念画一下。为什么要画这个画?待会还有个彩蛋。

老师: 我们先画一个野兽,野兽就画成老虎,可能是长得像猫咪;然后寒冷的话,我们用一个雪花来描述;病毒的话就是非常抽象的一个病毒。

老师: 然后房屋的的话,先画一个房子,再在里面画一个人。衣服我们就画一个T恤衫,可能T恤衫不能保温,我们应该画一个长袖的衣服。最后皮肤不知道怎么画,我们就画一个薄片,这样就可以了。

老师: 我们先观察一下这6幅图,然后我们做一个划分,一分为二,我们会发现左边这一栏他们是没有什么共同点,不尽相同,千变万化,但是右边是有明显的一个共同点,是什么共同点?你们能看出来吗?

学生C: 老师,我看出来了,其实就你画的这条线,它是边界,

老师: 你说的对,房屋,衣物,皮肤就像这条线一样,都是一种边界,它们可以把人和外界的危险隔开。让我们继续下一节。

02. 安全第一步

  • 建立边界(隔离)

老师: 至此,我们就得出了一个推论,人没有危险是为什么?是因为边界把他保护了起来,边界可以阻挡威胁。需要注意的是,截止目前我讲的都是现实生活中的安全,后续会讲Web系统中对应的边界概念。

老师: 那我们就可以这样说:安全第一步就是建立边界,边界的首要特性就是为了隔离。那边界还有哪些特性呢?让我们看下一节。

03. 边界是什么

  • 房屋有门和窗户 边界需要交换
  • 衣服要多穿几件 边界可以累加
  • 病毒会绕过皮肤 边界可能失效
  • 人体内免疫系统 边界冗余多样

老师: 我们看一下。人居住在房子里他就安全了,但是房屋要有门和窗户,这意味着什么?你虽然住在房子里,但这个房子不能是一个无懈可击的一个铁笼子,因为人还得出去还得呼吸是吧?也就是得有光线和空气进入,所以我们发现它有这样一个特点,必须交换。第二个是说衣服可以多穿几件,我刚刚T恤穿薄了,我就再穿一件厚一点的衣服,达到一个保温的效果。第三是病毒会绕过皮肤,虽然你建立了边界隔离,但是边界会失效,病毒它就绕过皮肤就进入你体内了。不过即使失效了,我们体内还有一套免疫系统,这是一种冗余机制,就是说哪怕你绕过了我第一层保护,我还有第二层保护,而这同时也说明了边界是多种多样的。

04. 边界的特性

  • 隔离
  • 交换
  • 冗余
  • 多样

老师: 我们在上一节试图理解什么是边界,归纳一下,它有四个方面特性,分别是隔离、交换、冗余和多样。让我考查一下大家,隔离是什么意思?

学生A: 老师,隔离是指把有害的物质和有益的物质分开,比如我们的皮肤就是一个隔离的边界,它可以阻止病毒和细菌进入我们的身体。

老师: 很好,那么交换呢?

学生B: 交换是指让有益的物质通过边界,比如我们的皮肤可以排汗,我们的鼻子可以呼吸,我们的眼睛可以看东西,这些都是交换的例子。

老师: 对,那么冗余呢?

学生C: 冗余是指当一个边界失效时,还有其他的边界可以保护我们,比如我们的皮肤被划破了,我们还有血小板可以凝血,我们还有免疫系统可以抵抗感染,这些都是冗余的机制。

老师: 没错,最后一个是多样,怎么理解它?

学生D: 多样是指不同的边界有不同的功能和形式,比如我们的墙壁可以防止风雨,我们的衣服可以保暖,我们的口罩可以过滤空气,这些都是多样的边界。

老师: 很棒,你们都理解了。接下来再看一个具体的例子,方便我们深入理解和记忆。

05. 例子:古代士兵

  • 古代重骑兵穿甲

老师: 这个例子是说古代士兵,比如重骑兵,他们会穿三层防护物,由里到外,分别是衣服、软甲和重甲,这些都是边界,它们有什么特性呢?

学生A: 老师,我发现,它们有隔离的特性,因为它们可以把士兵和敌人的兵器分开,防止受伤。

老师: 对,还有呢?

学生B: 它们也有交换的特性,因为它们不会完全包裹士兵,士兵还可以看到、听到、说话、呼吸、握住武器,这些都是交换的过程。

老师: 嗯,继续。

学生C: 它们还有冗余的特性,因为它们是三层的,如果一层被破坏了,还有两层可以保护,这样就增加了安全性。

老师: 最后一个呢?

学生D: 它们还有多样的特性,因为它们的材料和功能不同,比如衣服是柔软的,可以防止划伤,软甲是弹性的,可以防止切割,重甲是坚硬的,可以防止穿刺,这些都是多样的边界。

老师: 非常好,你们都说得很清楚,我们再次理解了边界特性的四个方面。我们看下一节。

06. 失效的边界

  • 隔离失效

  • 交换失效

  • 冗余失效

  • 多样失效

  • 可能带来危害(风险)

老师: 刚刚我们学习了边界特性,它们可以保护我们免受危害,但是我们也要知道,边界是可能失效的,比如我们的皮肤被刺破了,口罩被撕裂了,墙壁被打穿了,这些都是边界失效的情况。那么,当边界失效时,会发生什么呢?

学生A: 老师,当边界失效时,就会有危险的物质进入我们的边界,比如病毒、细菌、毒气、子弹等,这些都会对我们造成伤害。

老师: 对。那么,我们刚刚学习的四个边界特性,它们都有可能失效吗?

学生A: 老师,我觉得都有可能失效,比如隔离失效,就是边界不能有效地分开有害的物质和有益的物质,比如我们的口罩被撕裂了,就不能阻止病毒进入我们的呼吸道,这就是隔离失效的例子。

老师: 嗯,还有呢?

学生B: 还有交换失效,就是边界不能有效地让有益的物质通过,比如我们的眼镜被雾气遮住了,就不能看清楚周围的情况,这就是交换失效的例子。

老师: 对,继续。

学生C: 还有冗余失效,就是边界的数量或质量不足以保护我们,比如我们的衣服被火烧了,我们的皮肤被烫伤了,我们的免疫系统被压制了,这些都是冗余失效的例子。

老师: 最后一个呢?

学生D: 还有多样失效,就是边界的功能或形式不适合应对不同的危险,比如我们的墙壁可以防止风雨,但是不能防止地震,我们的口罩可以过滤空气,但是不能过滤水,这些都是多样失效的例子。

老师: 很好,这些都是边界失效的情况,同时,不同的的威胁可能造成不同的安全风险。

学生: 老师,风险和威胁有什么区别?

老师: 风险是指危害可能的严重程度。而威胁是指危险的物质本身,比如病毒、细菌、毒气、子弹等,这些都是威胁。

学生: 老师,那么,我们怎么评估风险的大小呢?

老师: 这首先取决于保护对象的重要程度。其次,评估风险的大小时,要看两个因素,一个是威胁的强度,一个是边界的强度,如果威胁的强度大于边界的强度,那么风险就很大,反之亦然。

老师: 简单说,降低风险,先考察保护的东西,再看是否要看减少威胁和增强边界。

学生: 懂了,谢谢老师。

老师: 好,到目前为止,我们讲的都是现实生活中的例子。我想一下,接下来我们就直接讲Web应用,还有个故事典例放到后面讲。

07. Web应用结构

  • 服务端
  • 客户端
  • 通信管道

老师: 我们接下来要学习的是Web应用的结构和安全需求。首先,我们来看看Web应用的结构,它由三个部分组成,分别是什么呢?

学生: 服务端、客户端和通信管道。

老师: 没错,服务端就是提供服务的一方,它负责处理客户端的请求,返回响应数据。客户端就是发起请求的一方,它负责展示响应数据,与用户交互。通信管道就是连接服务端和客户端的线路,它负责传输数据,保证数据的完整性和私密性。在Web应用中,我们常见的客户端是什么呢?

学生: 浏览器。

老师: 对,浏览器是最常见的客户端,它可以解析HTML、CSS、JavaScript等网页语言,呈现出网页的内容和效果。当然,客户端也可以是手机APP或者桌面应用,只要它们能够通过HTTP协议与服务端通信。本次分享我们默认客户端就是浏览器。

老师: 那么我们刚刚讲,我们抽象出了几个概念来,第一个是说安全是什么?我们得先有一个保护的对象,保护的对象得用一个边界隔离开来,把危险隔离开来,这是一个极简的一个模型。那么我们要探索Web应用的安全是什么?就得理解Web应用里我们要保护什么?

08. Web安全需求

  • 数据完整性
  • 数据私密性
  • 数据可用性

老师: Web应用其实是一个系统,看一下这个结构,它是一个信息系统,信息在系统里流通,然后信息系统的基础就是数据,数据有三个特性,实质上Web应用我们保护的就是这三个特性,数据的完整性指的是它不能被篡改防篡改,如果你把一个数据给篡改了,那么就破坏了它的完整性,私密性是说不能泄露,可用性指的是服务可用。你们能举个例子说明什么是数据的完整性、私密性和可用性吗?

学生: 数据的完整性就是数据不能被修改或删除,比如说我在网上购物,我付了款,但是商家把我的订单信息改了或者删了,那就破坏了数据的完整性。

老师: 不错,这是一个很好的例子。数据的私密性呢?

学生: 数据的私密性就是数据不能被未授权的人看到,比如说我在网上注册账号,我输入了我的密码,但是有人截取了我的密码,那就破坏了数据的私密性。

老师: 对,这也是一个很常见的情况,密码泄露还有可能导致更多的私密数据泄露。数据的可用性呢?

学生: 数据的可用性就是数据能够被正常地访问和使用,比如说我想上一个网站,但是网站被攻击了,无法打开,那就破坏了数据的可用性。

老师: 非常好,这几个例子都很贴切。

老师: 我们详细讲一下可用性,什么时候可用性遭到破坏,就是你保护的对象资源遭到破坏时,其实它破坏的是你的资源冗余度。比如说左边这个结构,它有服务器客户端,那么服务器上的资源冗余度是指什么?就是我们常见的CPU、内存,然后硬盘这些资源,比如说硬盘最多100g,结果你上传了一个1000g的文件,直接塞满了硬盘,资源的冗余度不足了,你就破坏了可用性。再例如带宽,刚刚的将通信通道上面需要保护带宽资源。

老师: Web应用安全需求除了这三个特性,后面还有人提出了数据的可追溯性。什么意思?简单讲就是我们用日志去记录数据的变化过程——谁操作了数据。一旦发生问题,我可以回溯,最终找到问题的根源。

老师: 这就是我们这两节要学习的Web应用的结构和安全需求,大家有什么问题吗?

学生: 没有了,老师请继续。

09. Web安全边界

  • 接口
  • 网关
  • 防火墙
  • 堡垒机
  • 蜜罐

老师: 好,我们现在知道了保护对象,那就是要保护数据的这三个特性,我们再来看一下Web系统中有哪些边界。其实很好识别,Web系统里的边界就是发生I/O的地方,input和output的地方,那就是边界。这里举了几个例子,就是接口、网关、防火墙、堡垒机和蜜罐。蜜罐可能不常见,我们后面会在一个故事典例里再次提到蜜罐。

学生A: 老师,还有什么边界吗?

老师: 当然有,这里只列举了与软硬件有关的技术边界。在Web应用中,边界多样性体现在它不一定是一个技术的边界,也可以是一个逻辑的边界,也可以是一个生物的边界,也可以是一个物理的边界。

学生: 老师,什么是接口?

老师: 好问题,我会逐一解释。接口就是Web应用和其他系统或者用户之间的交互点,比如说你用浏览器访问一个网站,那么浏览器和网站之间就有一个接口,它可以是HTTP协议或者HTTPS协议,接口的作用就是定义了数据的格式和传输方式,接口也是一个安全的边界,因为它可能会接收到恶意的数据或者请求,所以我们要对接口做一些安全的检查和过滤。

学生: 那网关呢?

老师: 网关就是一个网络设备,它可以连接不同的网络或者子网,比如说你的电脑和互联网之间就有一个网关,它可以是一个路由器或者一个交换机,网关的作用就是转发数据包,根据目的地址找到合适的路径,网关也是一个安全的边界,因为它可能会遇到一些恶意的数据包,比如说DDoS攻击、ARP欺骗等等,所以我们要对网关做一些安全的配置和监控,比如说设置防火墙规则、开启日志等等。

学生: 那防火墙呢?

老师: 防火墙就是一个软件或者硬件,它可以对网络流量进行过滤和控制,比如说你可以设置防火墙只允许特定的端口或者协议或者IP地址通过,防火墙的作用就是阻止一些不合法或者不安全的网络访问,防火墙也是一个安全的边界,因为它可以实现一些信任机制,比如说白名单和黑名单,白名单就是只允许信任的访问,黑名单就是禁止不信任的访问,防火墙可以部署在网关上,也可以部署在服务器上,也可以部署在客户端上,不同的位置有不同的作用和效果。

学生: 那堡垒机呢?

老师: 堡垒机就是一个专门用于管理和监控网络安全的服务器,它可以提供一些安全的服务,比如说远程登录、文件传输、日志审计等等,堡垒机的作用就是隔离和保护内部网络,比如说你有一个内网,你不想让外网直接访问你的内网,你就可以在内网和外网之间设置一个堡垒机,所有的访问都要经过堡垒机的验证和授权,堡垒机也是一个安全的边界,因为它可以实现一些安全的措施,比如说双因素认证、会话录像、操作审计等等。

学生: 那蜜罐呢?

老师: 蜜罐就是一个故意设置的诱惑和欺骗攻击者的系统,它可以模拟一些真实的服务或者数据,比如说一个假的网站或者一个假的数据库,蜜罐的作用就是吸引和分散攻击者的注意力,同时收集和分析攻击者的行为和特征,蜜罐也是一个安全的边界,因为它可以保护真正的系统和数据,同时可以提供一些情报和预警,比如说发现一些新的攻击手法或者工具,蜜罐可以部署在外网,也可以部署在内网,不同的位置有不同的目的和效果。

学生: 老师,这些技术边界看起来大同小异。

老师: 很准确的观察。其他边界就有所不同了,比如逻辑边界——业务逻辑漏洞,生物或社会边界——内部人员删库跑路,物理边界——机房老化着火。

学生: 懂了,谢谢老师,你的讲解很详细。

老师: 不客气,若你能持续关注Web安全的学习,也可以这样。接下来我们展开讲一下边界交换的信任机制。

10. Web边界交换

  • 白名单
  • 黑名单

老师: 好,我们可以这样想,危险的东西就是Web中的那种病毒木马,刚刚讲,有害的东西要隔离,有益的东西要通过。Web边界交换其实就是一个信任机制,信任机制的话有且只有两种——白名单和黑名单。比如登录名和密码,这是我们常见的一种认证机制,它的本质是白名单,就是你先在这个系统中做一个注册,管理员拿个小本本在后台记下来,那么你下次再次登录,先验证你是否在已经注册的用户列表里,然后你才能登录。

学生: 那老师,那黑名单是什么?

老师: 黑名单就是相反的,就是说你把一些不信任的东西列出来,然后拒绝它们的访问。比如你的电脑上有一个防火墙,它可以设置一些规则,比如说禁止某些IP地址的访问,这就是黑名单。还有一个典型例子是病毒库。

老师: 好,我们接着讲——我们应该怎么保护Web应用。

11. Web应用保护

  • 隔离(信任机制保护)
  • 备份
  • 监测

老师: 保护Web应用,首先就是做隔离,通过信任机制做保护,信任机制就是白名单和黑名单,然后做冗余也就是备份,比如说我们刚刚说CPU不足,那我们可以搞负载均衡,水平扩展多台服务器。

学生: 老师,有了备份机制,是不就万无一失了?

老师: 不是的,备份不能防数据泄露,无法保护数据的私密性,它只能保证一定的完整性和可用性。

学生: 懂了,那监测有什么用?

老师: 监测,就是实时监控资源冗余度和异常日志,可以起到预警的作用。

老师: 我们回顾一下,首先Web系统中的保护对象就是数据的三个特性,边界就是那种发生I/O的地方,危险的东西就是病毒和木马,这样我们就建立了对Web应用安全的初步的认识。

12. 例子:亡羊补牢

老师: 这里我举一个具体的例子,就是我们刚刚提到我们要讲一个故事典例,这个例子是什么?如题:亡羊补牢。

老师: 亡羊补牢后一句是为时已晚还是为时不晚,唔,都有可能。假如你牢里没有羊了,肯定为时已晚了。我们首先还是画画,先画一个方方正正的盒子,假如这就是牢,首先这是羊圈,我们画一个门,然后亡羊补牢里面的攻击者是谁,就有危险的东西是谁,它是狼。

学生: 老师,狼是怎么进入羊圈的呢?

老师: 我们把它叫狼人甲,他不会开门,他只能去挖洞,他在这就是挖了一个破洞,破洞怎么画?就这样画吧。他挖了一个破洞,这个破洞叫漏洞,他进入了羊群,我们把破洞后来补上了,牧羊人发现了它,把它补上了,这个东西就叫补丁。

学生: 老师,那补丁能防止狼再次进入吗?

老师: 很难说,补丁有可能再次破损,也还可能会有其他地方的漏洞。

老师: 现在有另外一个狼叫狼人乙,他是披着羊皮的狼。本来这里的牧羊人他是有一个认证机制的,它是说凡是长一个羊皮的动物,它就可以进入,他有这样一套认证机制,这是白名单还是黑名单,大家思考一下。

学生: 老师,这是白名单吧,因为它只允许有羊皮的动物进入。

老师: 对,这是白名单。那么狼人乙只要披着羊皮他就进入了,这是一种伪装措施伪装,或者说是一个绕过你的信任机制的措施。伪装在Web应用中叫什么?一般是叫木马,木马背后也有个故事,它是伪装的意思,这就是一个亡羊补牢的故事,便于我们理解Web系统中的安全。

学生: 老师,那木马是怎么被发现的呢?

老师: 羊圈里少了羊,牧羊人自然就要去找原因了,比如他给羊圈安装了监控,发现是披着羊皮的狼干的。

老师: 好,我们再讲一下之前提到的蜜罐,什么是蜜罐?我们还是用羊圈这个例子来做解释。牧羊人他发现自己的羊圈里的羊经常少,其实就是披着羊皮的狼干的,于是他给羊圈划分了一栏,后面是真正的羊圈,前面他放了一块羊肉,披着羊皮的狼进入,它去吃羊肉就暴露了,暴露以后它可能就直接走了,也可能就被发现了,这就是蜜罐,真正的羊群是受到了保护的,

13. 第一节总结

  • 没有边界,或者失效的边界,将可能导致系统处于受损的状态

老师: 我们最后做一个总结,这个总结就是:没有边界或者说失效的边界,将可能导致系统处于受损的状态,这就是安全领域要解决的问题。我们整体回顾一下第一章节的内容,第一节我们讲了什么是 Web安全,安全的话,人没有威胁,我们从人的例子开始讲起,然后举了1个古代士兵的例子,理解边界的4个特性,最后回到Web应用中,我们去理解Web应用的安全,就是保护数据的三个特性,如何让Web系统远离病毒和木马的威胁。最后举了一个亡羊补牢的例子。

老师: 那么我们最后做一个认识,就是从字义角度理解“什么是安全”。有没有同学知道,安全这两个字是怎么来的?

学生A: 老师,我知道,安这个字,它的上边一个宝盖头,在古汉语里是指房子,下面则坐着一个人,也就是你之前画的这个图。

老师: 你说的对。它表的意思是什么?

学生A: 是安宁平静。

老师: 不错。那全是什么?

学生B: 全下面是个王字,王本来是玉,它指的是一个纯洁无瑕的玉,也就是一块完整的玉——表完整的意思。

老师: 是的。这样我们就从字义层面理解了安全,安全就是人们对安静、安宁、平静、完整生活的一种美好期望。

学生C: 老师,这个期望是否能永恒地实现呢?

老师: 恐怕不能,安全状态是短暂的,截止目前你是安全的,但不代表以后你是安全的,这就是安全的时效性。

学生C: 理解了,安全是短暂的,所以我们才说要居安思危,时刻保持警惕,防范边界失效,从而不使系统受到威胁。

老师: 很棒。这就是第一章节的全部内容,下一章节我们将讲解Web安全漏洞。

附录

更新进度:

  • Web安全是什么
  • Web安全漏洞分类(未更新)
  • 如何评估漏洞危害(未更新)
  • 我们能做什么(未更新)
作者:|ExperDot|,原文链接: https://www.cnblogs.com/experdot/p/17206541.html

文章推荐

用好kafka,你不得不知的那些工具

SpringBoot 使用 Sa-Token 完成注解鉴权功能

UDP内核发包流程

对dubbo的DubboReference.check的参数进行剖析

测试环境治理之MYSQL索引优化篇

在.NET 6.0中自定义接口路由

深度剖析Redis九种数据结构实现原理,建议收藏

MySQL 8.0:无锁可扩展的 WAL 设计

C++学习路线

C++内存重叠

同步协程的必备工具: WaitGroup

vue3 迫不得已我硬着头皮查看了keepalive的源代码,解决了线...