什么是XSS?
跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取信息。
XSS攻击的几种常见的方式:
- 反射型
eg: http://XXX/welcomr?type=<script>alert(document.cookie)</script>- Dom-Based
eg: 当用户修改了某个标签里面的属性,比如说 img 的 src。或者是插入内容,改变前端 的结构,会造成攻击。<input type="text" id="web" /><button id="add">添加图片</button>
<div class="box"></div>
$('box').html(`<img src="${$('#web').val()}" />`)
// 比如我输入的内容是:XXX" onerror="alert(1) =>
<img src="XXX" onerror="alert(1)" />- 持久型攻击
eg: 输入的内容入了服务器,比如常见的用户评论功能避免XSS攻击的方法:
- 反射型:
对于这种攻击方式,Chrome浏览器发现路径存在异常,会有XSS屏蔽功能,但是比如火狐等其它浏览器里面并没有这样的屏蔽功能。一般情况下会让cookie在前端不可以获取,但是这并不是解决XSS的方案,只能降低受损的范围。
- Dome_Based:
这种攻击的内容一般把它叫成 “XSS payload”$('box').html(`<img src="${encodeURI($('#web').val())}" />`)- 持久型攻击
这种攻击一般叫它 “XSS 存储型”,恶意的脚本存储到了服务器上,所有人访问时都会造成攻击,比反射型和Dome-Based 范围更大- 客户端传递给服务器时,需要校验,先过滤
- 服务器在做一次过滤
- 直接在输入的时候过滤
总结:
转义 + 过滤