1、定义
通过web站点的漏洞,向客户端交付恶意代码(弹窗、广告、js脚本等),实现对客户端的攻击。
作用:盗取cookie、重定向到第三方
2、分类
1) 反射型XSS
反射型XSS只是简单的把用户输入的数据“反射”给浏览器,即诱导用户“点击”一个恶意链接,才能攻击成功。反射型xss也叫做“非持久型XSS”。
2)存储型XSS
存储型XSS会把用户输入的数据“存储”在服务器。具有很强的稳定性。
3)DOM型XSS
是由于客户端脚本自身解析不正确导致的安全问题。
3、原理
1)反射型XSS
获取cookie值:
重定向到第三方:
2)存储型XSS
获取cookie:
重定向到第三方:
4、绕过方式
1)过滤掉<script>标签:大小写混写,使用其他标签<a>,<img>,<svg>等。
2)alert被过滤:可使用十进制对其编码,十六进制需要以&#x开头。
3)HTML实体化:在html中,某些字符是预留的。用实体编号来代替字符,浏览器访问时会将编号解析还原为字符。
4)xss参数在GET请求中,需要对&,#进行url编码。
5)字符集绕过:用浏览器支持的字符集进行payload的编码。
6)js转义。
7)空字符,空字符使得过滤器看不到完整的<script>标签。
8)使用eval函数来构造动态字符串。<script>eval(‘al’+’ert’(1))</script>
9)空格被过滤可使用/**/进行替换。
10)使用base64进行编码。
5、防御方式
1)对输入和url参数进行过滤,对输出进行编码。
2)尽可能使用白名单去防御xss。
3)针对cookie的安全防护,尽可能使用httponly属性去进行安全控制。