什么是XSS攻击?
XSS攻击是最常见的网络攻击方式,攻击者通过在网页中注入恶意的html或者javascript代码,当用户浏览该网页的时候,从而控制用户的浏览器或者窃取用户的信息。
XSS攻击的类型
- 存储型XSS攻击
最常见的用例就是网站的评论功能,我将下面的这段代码上传到网站的评论区,评论内容就被存储在服务器当中了,当其他用户访问带有该评论的网页时,这段内容将会被执行。
<script> while (true) { alert( document.cookie) } </script>
当攻击者取到用户的cookie的时候,可以将cookie发送到自己的服务器,达到冒用用户的目的。
- 反射型XSS攻击
反射型XSS攻击是指把用户输入的搜索数据反射给浏览器。
上述搜索页面是比较常见的搜索页面,无论输入的关键词是否有结果,都会把搜索关键词返回显示在页面上。
攻击者设置一个陷阱,让用户点击一个链接,链接的内容是本站的搜索接口:
https://www.kkkk1000.com/xss/keywords=<script>alert(document.cookie)</script>
攻击者在搜索接口的参数中注入了一段恶意代码(可以获取用户cookie为自己所用)
点击链接之后,发送请求,服务器将参数内容显示在页面上,执行该段代码,触发XSS攻击。
- DOM型XSS攻击
DOM 型 XSS 形成原因是通过修改页面的 DOM 节点形成的 XSS。 DOM 型 XSS 攻击中,取出和执行恶意代码都由浏览器端完成,属于前端自身的安全漏洞。
假如,将链接后面的参数取出来显示在页面的DOM中,攻击者就可以伪造恶意代码作为参数的链接,用户点击链接就可以实现一次XSS攻击。
防御XSS攻击
- httpOnly防止cookie攻击
httpOnly这个属性指的是cookie只能用在http协议上,用户不能读取和修改cookie。这个属性可以有效的防止XSS攻击中的cookie攻击(防止盗取用户登录信息)。
- 输入检查
对用户的输入进行检查、过滤和编码。
在 XSS 防御中,输入检查一般是检查用户输入的数据中是否包含 <,> 等特殊字符,如果存在,则对特殊字符进行过滤或编码,这种方式也称为 XSS Filter。
- 输出检查
服务器对自己输出的内容也进行检查和编码。
一般来说,除富文本的输出外,在变量输出到 HTML 页面时,可以使用编码或转义的方式来防御 XSS 攻击。
- 内容安全策略(CSP) 内容安全策略(Content Security Policy,CSP),实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,大大增强了网页的安全性。
参考文章: