通过向网站写入js脚本来实现攻击,攻击者在web页面插入恶意html代码,当用户浏览该网页时,嵌入的代码就会执行,从而达到攻击的目的
- 反射型
反射型XSS只是简单地把用输入的数据"反射"给浏览器,往往需要诱使用户点击一个恶意链接,或者提交一个表单,或者进入一个恶意网站时,注入脚本进入被攻击者的网站
- 存储型
攻击者将恶意代码提交到目标网站的数据库中,用户打开目标网站,服务端将恶意代码从数据库去除拼接在html中返回给浏览器,浏览器接收到响应后解析执行
常见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等
- DOM型
DOM型XSS和前两种XSS的区别
DOM型XSS取出和执行恶意代码由浏览器完成,属于前端js自身的安全漏洞,而其他两种属于服务端的安全漏洞
XSS攻击两大要素
1. 攻击者提交恶意代码
2. 浏览器执行恶意代码
- 输入检查: 对输入内容中的 <script> 等标签进行转义或者过滤
- 设置httpOnly: 很多XSS攻击目标都是窃取用户的cookie伪造身份认证,设置此属性可以防止js获取cookie
- 开启CSP: 开启白名单,可组织白名单意外的资源加载和运行
攻击者盗用客户的身份,以客户的名义发送恶意请求
- 每次用户提交都需要用户在表单填写一个验证码,这样可以有效防止其他网站恶意攻击
- 验证token: 浏览器请求服务器,服务器返回一个token,每个请求都同时带上token和cookie才被认为是合法请求
- Referer: 通过验证请求头的 Referer 来验证来源站点,但请求头很容易伪造
- 验证SameSite: 设置cookie的 SameSite,可以让cookie不随跨域请求发出