Web安全-xss

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标签

4、测试Demo

https://github.com/wjxdem/xss