1、XSS的原理
1.1、定义
XSS 全称 Cross Site Scripting ,跨站脚本攻击。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中的Script代码会被执行,从而达到窃取信息,植入广告等恶意攻击用户的目的。
1.2、网站交互示意图
1.3、攻击原理
XSS Fuzzing(模糊测试)是挖掘漏洞最常用的手段之一。通俗可以把这种方式理解为不断尝试的过程。
2、XSS攻击类型
2.1、反射型
非持久型xss攻击是一次性的,仅对当次的页面访问产生影响。
用户访问访问一个被攻击者篡改后的链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的。(一般容易出现在搜索页面,评论页面)
有几个小列子:
/?myxss=<img src="null“ onerror="alert(1);"/>
/?myxss=<img src="null“ onerror="alert(document.cookie);"/>
2.1、存储型
存储型XSS,是持久化的,代码存储在服务端(数据库,内存,文件系统)中,攻击行为将伴随着攻击数据一直存在。
在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie。
3、XSS的防御
3.1、编码
对用户输入的数据进行HTML Entity编码。
可以参考w3c文档:https://www.w3.org/wiki/Common_HTML_entities_used_for_typography
3.2、过滤
移除用户上传的DOM属性,如onerror,onclick等。
移除用户上传的style,script,iframe节点。
根据白名单过滤HTML:https://github.com/leizongmin/js-xss
3.2、较正
避免直接对HTML Entity解码。
使用DOMParse转换,校正不配对的DOM标签