利用方法:直接在输出的地方进行xss攻击

解决方案:需要进行过滤,最常见的比如过滤 < 、>,如下内容输入:https://xxx.com/?umod=commentsoutlet&act=count&siteid=3&libid=9&dataid=1480&score=<img src=1 onerror=alert(1);>&func=haoping&_=1353475261886 可以直接被执行

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.aaaaaaaaa</script><script>alert(1)</script>(_ret);}catch(err){aaaaaaaaa</script><script>alert(1)</script>(_ret);}</script>
则可以通过输入 eval(‘alert(1)’);void

<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; 变换成&#00XX;也是同样可以执行的

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的关键函数:flash.external.ExternalInterface.call、getURL、navigateToURL、_evalJS及伪协议javascript:传入用户可控的参数 都可能导致XSS
利用:对特定函数传递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文件的合法性