一、概述
XSS(Cross Site Script),即跨站脚本攻击,是指攻击者通过在Web页面中写入恶意脚本,造成用户在浏览页面时,控制用户浏览器进行操作的攻击方式。
跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。
二、分类
1.反射型XSS
攻击方式:攻击者构造好get请求参数,将带有恶意参数的链接发给受害者,诱使受害人点击后,服务器接收到受害人的请求并处理,然后把恶意XSS代码发送到受害人的浏览器,浏览器解析这段代码后就会触发XSS攻击,完成攻击者想要的功能(获取cookie、url、浏览器信息、IP等)。
2.存储型XSS
存储型XSS又称为永久性XSS攻击,常见于留言板、博客、论坛。攻击恶意脚本会被存放进数据库,以至于每次访问浏览器,数据库都会将恶意代码查询发给浏览器,继而触发存储型XSS漏洞。
3.DOM型XSS
DOM型XSS不与后台服务器进行交互,是一种通过dom操作前端代码输出的时候产生的问题,实际上也属于一次性反射型XSS。挖掘dom型XSS就不能看源代码了,而需要看网页元素信息中的JS代码,理清代码逻辑。
三、防御手段
XSS漏洞本质是网站在设计初期,对输入的文本没有进行过滤,导致输入的js、jsp、html等被编译,所以防御的手段也很直观,即:“输入要做过滤,输出要做转义”。
1.过滤:
根据业务需求过滤,比如手机号只允许输入手机号格式的数字。
在留言板或论坛等,则可以过滤掉特殊字符或命令字符。
限制HTTPonly,使得无法通过js获取cookie。
2.转义:
所有输出到前端的数据都要做转义,比如输出到html里做html转义,输出到js里面做js转义。