文章目录
前言
这篇文章是来记录博主对《图解HTTP》书中知识点进行梳理,作为强化学习。网上对此书非常推崇,博主认为这本书是小白入门计网的绝佳选择。我会捋清书中每一章的知识点,梳理出主要且常用的知识点记录总结。看之前最好结合目录问题看,带着问题读完会书中的知识会更有效果。
一、Web攻击模式
关于web的攻击模式可以大致分为两大类,主动攻击和被动攻击。
1.主动攻击
主动攻击(active attack)是指攻击者通过直接访问 Web 应用,把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源。
2.被动攻击
被动攻击(passive attack)是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标 Web 应用访问发起攻击。
二、XSS(跨站脚本攻击)
1.什么是XSS?
跨站脚本攻击(Cross-Site Scripting,XSS) 是指通过存在安全漏洞的Web 网站注册用户的浏览器内运行非法的 HTML标签或 JavaScript 进行的一种攻击。动态创建的 HTML部分有可能隐藏着安全漏洞。就这样,攻击者编写脚本设下陷阱,用户在自己的浏览器上运行时,一不小心就会受到被动攻击。
2.XSS是如何攻击的?
XSS在我们的一个开发页面中,通过注入一些恶意脚本在我们页面中,当用户来访问我们的页面时,就会发起攻击。比如将用户的信息泄露或者直接将用户的电脑变成挖矿的机器。
为什么他能够得手,是因为我们作为开发者盲目地信任了用户提交的内容、无法在UI上被感知到。
主要手段就是通过传入带srcipt
标签字符串,当我们开发者把字符串转化成DOM时,陷阱就布置成功了。
3.XSS的攻击案例
下面我们通过书中的一个案例来理解这个过程
例:
下方界面显示了用户输入的个人信息内容。
确认界面按原样显示在编辑界面输入的字符串。此处输入带有山口一郎这样的 HTML标签的字符串。
此时的确认界面上,浏览器会把用户输入的<s>
解析成 HTML标签,然后显示删除线。
这里删除线显示出来并不会造成太大的不利后果,但如果换成使用script
标签那后果难以现象。
不仅如此,xss还可以通过表单提交的方法来进行攻击。
下图网站通过地址栏中 URI 的查询字段指定 ID,即相当于在表单内自动填写字符串的功能。而就在这个地方,隐藏着可执行跨站脚本攻击的漏洞。
充分熟知此处漏洞特点的攻击者,于是就创建了下面这段嵌入恶意代码的 URL。并隐藏植入事先准备好的欺诈邮件中或 Web 页面内,诱使用户去点击该 URL。
浏览器打开该 URI 后,直观感觉没有发生任何变化,但设置好的脚本却偷偷开始运行了。当用户在表单内输入 ID 和密码之后,就会直接发送到攻击者的网站(也就是 hackr.jp),导致个人登录信息被窃取。
之后,ID 及密码会传给该正规网站,而接下来仍然是按正常登录步骤,用户很难意识到自己的登录信息已遭泄露。
4.对于XSS的防御手段
永远不信任用户的提交内容,更不要把用户的提交内容直接转成DOM。
目前的主流框架都默认防御这种攻击。不过如果真有这种需求的话,就需要对对应的文件进行扫描了。也不要让用户自定义跳转链接。
二、SQL注入攻击
1.什么是SQL注入攻击
SQL注入(SQLInjection)是指针对 Web 应用使用的数据库,通过运行非法的 SQL而产生的攻击。该安全隐患有可能引发极大的威胁,有时会直接导致个人信息及机密信息的泄露。
2.SQL注入攻击案例
下面以某个购物网站的搜索功能为例,讲解 SQL注入攻击。
我们主要通过将某作者的名字作为搜索关键字,查找该作者的所有著作。来了解SQL攻击。
上面两个图是正常处理操作的示例。下面我们来看一下SQL注入攻击的操作。
把刚才指定查询字段的上野宣改写成“上野宣’–”。
SQL语句中的 – 之后全视为注释。即,and flag=1 这个条件被自动忽略了。结果跟 flag 的设定值无关,只取出满足 author=“上野宣”条件所在行的数据,这样连那些尚未出版的书籍也一并显示出来了。
3.SQL注入攻击的原理
观察上面的例子,不难发现SQL 注入攻击是通过破坏 SQL 语句结构,将 SQL语句改变成开发者意想不到的形式以达到破坏结构的攻击。
比如,在之前的攻击案例中,就会把 author 的字面值(程序中使用 的常量)" 上野宣 ‘–" 的字符串赋值给 $q。
上图中颜色标记的字符串最开始的单引号 (’) 表示会将 author 的字面值括起来,以到达第二个单引号后作为结束。因此,author的字面值就成了上野宣,而后面的 – 则不再属于 author 字面值,会被解析成其他的句法。
4.对SQL注入攻击的防御
对于SQL注入的防御
那对于这种数据库形式的攻击,我们就要保证最小权限原则,并且建立允许名单+过滤,并对于URL类型参数进行协议等限制。
三、CSRF攻击(跨站点请求伪造)
1.什么是CSRF攻击?
跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。
是不是听着和XSS差不多?
但两者是有区别的,CSRF是通过利用了用户的数据伪造了请求,从而修改了用户的数据。而XSS是通过设置脚本来攻击的。
2.CSRF攻击案例
下面以留言板功能为例,讲解跨站点请求伪造。该功能只允许已认证并登录的用户在留言板上发表内容。
在该留言板系统上,受害者用户 A 是已认证状态。它的浏览器中的 Cookie 持有已认证的会话 ID(步骤①)。
攻击者设置好一旦用户访问,即会发送在留言板上发表非主观行为产生的评论的请求的陷阱。用户 A 的浏览器执行完陷阱中的请求后,留言板上也就会留下那条评论(步骤②)。
触发陷阱之际,如果用户 A 尚未通过认证,则无法利用用户 A的身份权限在留言板上发表内容。
四、DoS和DDoS
1.什么是DOS攻击?
DoS是Denial of Service的简称,即拒绝服务。最常见的DoS攻击有计算机网络宽带攻击和连通性攻击。
这种攻击方式是通过构造特定请求,来让服务端无法处理激增的大量请求,导致正常的请求无法被处理甚至宕机。
2.DoS实现原理
要理解Dos攻击,首先要理解TCP连接的三次握手过程(Three-wayhandshake)。在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送SYN包((SYN=i)到服务器,并进入SYN SEND状态,等待服务器确认;
第二次握手:服务器收到SYN包,必须确认客户的SYN (ACK=i+1 ),同时自己也发送一个SYN包((SYN=j)}即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=j+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手,客户端与服务器开始传送数据。
好,在这里我们普及一个概念:
半连接:收到SYN包而还未收到ACK包时的连接状态称为半连接,即尚未完全完成三次握手的TCP连接。
所以它就是利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。
3.DDoS攻击
分布式拒绝服务(DDoS)攻击是通过大规模互联网流量淹没目标服务器或其周边基础设施,以破坏目标服务器、服务或网络正常流量的恶意行为。
4.DDoS攻击的原理
和Dos类似,但是此时他发送的攻击设备是通过大量的僵尸设备发送正确的请求,从而消耗服务器的带宽,达到攻击的目的。
总体而言,DDoS 攻击好比高速公路发生交通堵塞,妨碍常规车辆抵达预定目的地。
当僵尸网络将受害者的服务器或网络作为目标时,每个机器人会将请求发送到目标的 IP 地址,这可能导致服务器或网络不堪重负,从而造成对正常流量的拒绝服务。
由于每个机器人都是合法的互联网设备,因而可能很难区分攻击流量与正常流量。
5.DDos和Dos的区别
DoS攻击,是利用自己的计算机攻击目标,是一对一的关系;而DDoS攻击是在DoS攻击的基础之上,产生的一种新的攻击方式。
总结
Web安全内容对于我们开发者也是很重要的内容,本文列举了一些常见的攻击手段,事实上还有其他很多其它的攻击手段。如在XSS中还分为分为 存储型、反射型(服务端注入)、基于DOM的XSS攻击(浏览器注入)和基于Mutation的XSS攻击。在注入攻击也有OS注入和HTTP注入等攻击手段。这些内容感兴趣可以自行去了解。
参考文献:《图解HTTP》作者:上野 宣
参考博客:https://www.cloudflare.com/zh-cn/learning/ddos/what-is-a-ddos-attack/
https://juejin.cn/post/7125354024039104526/#heading-0