XSS(Cross-Site Scripting)
漏洞:当用户输入的内容发送到服务器,服务器动态生成的页面中会将输入内容拼接进去,而不加任何非法字符验证或过滤;
攻击原理:可以在输入中编写攻击代码(<script>攻击代码<script/>
),服务器返回被注入恶意代码的HTML后,浏览器解析该HTML时将直接执行其中的攻击代码。
注:本该为CSS,但该缩写已经被占用(Cascading Style Sheet),所以改为XSS;
反射型
常见场景:查询;
注入恶意代码的输入信息,提交到服务器后,服务器将返回一个包含恶意代码的动态生成的HTML,浏览器解析过程中将执行该恶意代码,整个过程中,恶意代码经过服务器的反射达到攻击目的;
防御:
- 严格处理用户输入(白名单过滤,转码特殊字符,如
<>
); - 服务器生成动态页面时,避免使用
document.innerHTML, eval, new Function, document.create
等api; - 服务器端通过set-cookie:httponly,通知浏览器cookie仅允许通过http传输,禁止脚本读写;
存储型
常见场景:各种需持久化用户输入的场景,如发帖,评论等;
提交含恶意代码的信息,服务器端将该信息持久化到数据库中,假如该信息会被插入到某个页面中,那么任何访问该页面的用户都将遭受攻击。
防御:同反射型;
DOM型
常见场景:页面提交的内容直接插入到当前DOM Tree中;
对于由前端控制的页面,如果直接将任何可被用户修改的信息,利用ajax技术直接插入到当前HTML文档中,而无需经过服务器反射,将导致恶意代码躲避服务器端检测而直接执行,例如从URL中获取参数,然后使用document.innerHTML等API动态改变当前页面;
防御:同上;
CSRF(Cross-Site Request Forgeries)
首先用户需要登陆过正常网站A并生成了cookie,然后攻击者伪造一个超链接或页面B,诱骗用户点击,然后该超链接或页面B将会向A发起一个跨域请求,浏览器会自动携带上A创建的cookie,而由于服务器对cookie的信任,直接执行了相关操作,实际上该操作是攻击者伪造用户本人发起的请求。
防御:
- 严格验证http首部referer;
- 禁止第三方cookie:
set-cookie:SameSite=strict
; - 网站请求必须携带
authorization:<token>
; - 终极解决方案:验证码;
注:localStorage中存储的token虽然可以避免单一的CSRF攻击,但仍会被XSS攻击非法获取,进而发起CSRF攻击;
Clicking hijack
通过iframe引入正常网页,将其设置为透明,再构建一个虚假的页面,覆盖正常网页的内容,添加一个位于特定位置的诱导用户点击的按钮或链接,用户点击虚假按钮,将会同时点击到正常网页中的按钮,从而执行一些超出用户预期的操作;
防御:响应正常网页时,添加X-FRAME-OPTIONS:DENY(或SAMEORIGIN)首部,符合规范的浏览器将会根据该首部,决定是否允许将正常网页以iframe的形式插入到当前网页中;
注:x-frame-options首部已经被Content-Security-Policy替代;
MITM(Man-in-the-Middle)
用户与服务器的通信不是直接通信,而是经过若干代理、服务器的中转,因此明文发送的数据可以被任何中间服务器读写,这就是中间人攻击。
防御:避免使用http这种明文的协议,转而使用https;
DDOS(Distributed Denial of Service)
DOS攻击是向被攻击方发送大量数据,使被攻击方网络拥塞甚至瘫痪,是一种同时消耗攻击者与被攻击者带宽的攻击方式,DOS与DDOS的区别是规模大小,DDOS是基于海量主机发起的DOS攻击。
SYN Flood
由于TCP建立连接需要客户端发送SYN报文,服务器需要回应一个SYN-ACK报文来确认,并等待客户端再次发送一个ACK报文二次确认。基于该机制,攻击者发送大量SYN报文,而不回应ACK报文,服务器在一段时间内一直占用资源,从而导致服务器资源耗尽,无法处理正常请求。
防御:
- 高性能防火墙:借助防火墙的性能优势,充当客户端与服务器之间的代理;
- 源认证:发送一个错误的SYN-ACK包,正常客户端会回应一个RST包,以此辨别正常用户与攻击者;
- 首包丢弃:即丢掉第一个SYN包,正常客户端会重发一个SYN包,此时再处理;
DNS Flood
通过发送大量虚构域名的DNS查询包,耗尽DNS服务器的资源;
防御:
- 将DNS报文TC标志置为1,然后再进行回应,要求客户端以TCP方式重发DNS包,然后进行源认证;
- 首包丢弃;
UDP Flood
- UDP Flood:发送大量UDP包,耗尽服务器资源;
- UDP反射放大:源地址伪造为被攻击地址,向NTP服务器发送Monist请求,NTP服务器会向被攻击地址发送大量响应报文,耗尽服务器资源;
防御:特征过滤;
其他
SQL注入:将客户端的请求参数直接拼接到SQL语句中,进而执行攻击者写入的SQL;