漏洞原理
攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如Cookie、Session-ID等,进而造成安全隐患
XSS分类
反射型XSS
最常见的攻击类型,属于非持久性攻击.当攻击者在单个HTTP链接中注入可执行的JS代码,并被受害者点击时,这段代码将被执行,由此发生反射型XSS攻击
存储型XSS
危害最大的攻击类型,属于持久型攻击。当攻击者利用漏洞在服务端的应用中插入可执行的JS代码,并且相关代码被受害者访问时,就可能发生存储型XSS攻击
DOM型XSS
DOM是JS中的文档对象模型,用来在浏览器中表示文档的结构格式。当攻击者可以控制DOM时,就可能会发生DOM型XSS攻击
漏洞危害
网页挂马、会话劫持、用户劫持、信息窃取、网站钓鱼、DDoS、蠕虫等
检测方法
在输入中插入恶意代码,并查看用户的输入是否被浏览器所解析
防御方案
过滤
后端对用户的输入进行合法性校验
script、img、a 标签等
转义
escapeHTML、unescapeHTML 等函数
为Cookie添加HTTP-Only标记
添加后的Cookie不允许脚本读取或修改,HTTP-Only不能防XSS,只能防盗Cookie
绕过手段
javascript:;绕过转义
代码不会立即执行,但一旦用户点击a标签时,浏览器就会弹出XSS
<a href="javascript:alert('xss');">123</a>
大小写混写、双写
jAvascRipt:alert('xss')
空格、回车、制表符
替换弹窗函数
编码