1、用户输入原样输出
利用方法:直接在输出的地方进行xss攻击
解决方案:
需要进行过滤,最常见的比如过滤 < 、>,
如下内容输入:
可以直接被执行
2、输出在<script></script>之间
利用方法:
1)通过闭合标签的方式来进行xss攻击,如注入</script><script>xss code</script><script>
2) 注入特殊的代码保证<script> </script>标签内的代码仍然是正常的JS语法,且可以执行恶意JS代码
如输入aaaa 显示:
则可以通过输入
<script type='text/javascript'>document.domain='xxxx.com';_ret={"_res":2};try{parent.eval('alert(1)');void(_ret);}catch(err){eval('alert(1)');void(_ret);}</script>
解决方案:
1)、过滤用户输入的内容,常见的是过滤 ‘、”、;、< 、>
2)、尽量不要把用户可以控制的变量内容输出在<script>标签内部
3、输出在HTML属性页面里面
利用方法:
在属性标签里面注入js代码,比如 在input标签里面注入 onclick事件
解决方案:
1)、由于出现在HTML属性的html实体会被自动转义并执行,故需要严格过滤 / 、 & 字符。
2)、 匹配HTML实体时若用正则匹配需要考虑到&#XX; 变换成�XX;也是同样可以执行的
4、 双字节编码绕过
利用方法:
在特殊的字符集(常见GBXXXX)编码情况下,输入” 被转义/”的情况下,通过输入一些高位编码可以注入代码从而闭合”如输入 %a0″,就可以绕过转义的情况。
解决方案:
1、可以统一指定编码为UTF8
2、 对高位的字符进行过滤,不允许输入非文本字符。
5、 输出在双引号内
利用方法:
用户可以通过输入 / 来匹配正文中的” 从而使后面的语法失效,导致注入XSS代码。
解决方案:
对 / 进行过滤
6、输出在注释中
利用方法:
对于一些变量输出在注释中,可以通过换行的方式注入JS代码 如下图所示:
解决方案:
不允许在注释代码中插入用户可以控制的变量
7、输出在DOM函数中
常见的DOM XSS 为变量输出在函数 document.write、innerHTML、JQUERY中的$("#y").html("xxxxxxx");
利用方法:
将变量传递给DOM 函数的参数
解决方案:
对传递给DOM 函数的参数就行严格过滤,JS中由于支持unicode编码的字符,需要过滤 /
8、输出在eval函数中
利用方法:通过”;”注入代码到eval函数的参数中,从而执行js代码
解决方案:尽量不使用eval函数,对eval函数的参数进行严格过滤,过滤 “;”
9、输出在SRC属性标签
利用方法:
通过javascript vbscript data等伪协议执行js
解决方案:
1、对SRC的赋值进行过滤,不允许出现javascript: vsscript: data: 等伪协议。
2、由于html实体编码的字符仍然可以被解析,对& # : 均需要过滤
10 输出在flash关键函数中
在flash的关键函数:
传入用户可控的参数 都可能导致XSS
flash.external.ExternalInterface.call、getURL、navigateToURL、_evalJS及伪协议javascript:
利用:对特定函数传递js代码可以执行JS。
如:
navigateToURL(new URLRequest(link), "_self"); 给link参数传递为:"javascript:alert(1)"
解决方案:
判断相关参数的合法性(如仅允许数字 字符),限制URL合法性,不允许出现javascript、;等字样
11、 FLASH加载任意XML文件
flash通常会通过xml配置文件来取参数,如果flash可以通过加载任意XML则可能导致远程加载任意flash、执行任意JS代码。
利用:
传递xml参数一个恶意地址,通知控制里面的参数的值来执行XSS
解决方案:
判断XML文件的合法性
http://www.3hack.com/bbs/?thread-index-fid-1-tid-74.htm
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论