关于XSS攻击的笔记

425 阅读3分钟

什么是XSS攻击?

XSS攻击是最常见的网络攻击方式,攻击者通过在网页中注入恶意的html或者javascript代码,当用户浏览该网页的时候,从而控制用户的浏览器或者窃取用户的信息。

XSS攻击的类型

  • 存储型XSS攻击

最常见的用例就是网站的评论功能,我将下面的这段代码上传到网站的评论区,评论内容就被存储在服务器当中了,当其他用户访问带有该评论的网页时,这段内容将会被执行。

<script> while (true) { alert( document.cookie) } </script>

当攻击者取到用户的cookie的时候,可以将cookie发送到自己的服务器,达到冒用用户的目的。

  • 反射型XSS攻击

反射型XSS攻击是指把用户输入的搜索数据反射给浏览器。

image.png

上述搜索页面是比较常见的搜索页面,无论输入的关键词是否有结果,都会把搜索关键词返回显示在页面上。

攻击者设置一个陷阱,让用户点击一个链接,链接的内容是本站的搜索接口: 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),实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,大大增强了网页的安全性。

参考文章:

github.com/dwqs/blog/i… juejin.cn/post/684490…