1.1 什么是XSS漏洞
????????跨站脚本攻击(Cross Site Script,为了不和css混淆,故将其缩写为XSS)通常发生在客户端,攻击者在Web页面中插入恶意的JavaScript代码(包括VBScript和ActionScript代码等),用户浏览此页面时,会执行这些恶意代码,从而使用户受到攻击。本质:是一种HTML的注入,恶意代码数据当成了HTML代码的一部分被执行。
1.2 XSS的攻击形式
????????DOM跨站攻击:攻击者在为规范JavaScript的HTML页面中插入一段恶意代码,直接操作用户数据的数据,在页面最终展示会执行恶意脚本,从而达到攻击目的。与其他攻击形式的不同之处是DOM跨站攻击不与服务端进行数据交互。
????????反射型跨站脚本攻击:攻击者发送一个携带恶意脚本的URL给用户并诱导其访问,浏览器会执行页面嵌入的恶意脚本,从而达到攻击目的。
???????? 存储型跨站脚本攻击:攻击者利用程序提供的添加、修改数据功能,将恶意脚本数据存储到服务器中,当其他用户浏览展示该数据的页面时,浏览器会执行页面嵌入的恶意脚本,从而达到攻击目的。
1.3 XSS漏洞的危害
????????窃取信息(如:盗取用户的cookie,伪造用户身份登录)
????????钓鱼欺诈
????????蠕虫攻击
1.4 XSS漏洞修复或防守方法
????????在了解了常见的攻击类型及手段之后,需要针对不同的应用程序及场景进行漏洞防护。针对前端静态模板的Web应用,如freemarker、velocity等可以从静态模板入手封装公共方法对用户输入数据进行转义操作;前后端分离的应用可在服务端web接口层面统一过滤转义用户数据。本质:过滤转义恶意代码,使其无法执行。
? ? ? ? 下面是不同的场景下,对数据的转义操作。
1.4.1 在HTML页面标签中或标签属性值中
1.页面HTML中:<div>$name</div>
2.标签属性中:<input type="text" name ="name" value ="$name">
以上两种需要对$name中的以下字符进行转义:
左尖括号:<转成<
右尖括号:>转成>
单引号:'转成'
双引号:"转成"
3.标签onclick等事件函数参数中:<button type="button" onclick="click($param)">Button</button>
需要对$param中的以下字符进行转义:
左尖括号:<转成<
右尖括号:>转成>
&符号:&转成&
单引号:'转成\'
双引号:"转成\"
反斜杠:\转成\\
正斜杠:/转成\/
换行符:\n转成\n
回车符:\r转成\r
4.标签url参数中:<a href="http://www.xxx.com/param=$param">链接</a>
需要对$param中的以下字符进行转义:
考虑HTML和JS环境:
单引号:'转义成%27
双引号:"转义成%22
左尖括号:<转义成%3C
右尖括号:>转义成%3E
正斜杠:/转义成%2F
反斜杠:\转义成%5C
考虑字符对URL的影响:
/转义成%2F
?转义成%3F
#转义成%23
&转义成%26
%转义成%25
=转义成%3D
1.4.2?在JS代码中
1. 在script标签中
<script>
var name="$name";
</script>
需要对$name中的以下字符进行转义
单引号:'转成\'
双引号:"转成\"
反斜杠:\转成\\
正斜杠:/转成\/
换行符:\n转成\n
回车符:\r转成\r
2.在JS中innerHTML插入字符串时
<script>
document.getElementById("id").innerHTML ="$html";
</script>
需要对$html中的以下字符进行转义:
左尖括号:<转成<
右尖括号:>转成>
单引号:'转成\'
双引号:"转成\"
反斜杠:\转成\\
正斜杠:/转成\/
换行符:\n转成\n
回车符:\r转成\r
|