按照利用方式的不同,可以把XSS漏洞大致分为三类,如表11-3-1所示。
表11-3-1 XSS漏洞分类
类型
对应的Web应用
利用方式及危害
本地的XSS
.htm 文件
.chm 文件(帮助文档)
.mht 文件
.dlls and .exe等PE文件的内部资源中也可能存在XSS
攻击用户桌面
无存储的XSS
搜索引擎,错误信息提示等将在页面中显示用户输入的Web应用
窃取cookie,更改返回页面的内容,如XSS Reflection
有存储的XSS
BBS、论坛、博客等存储用户数据并提供显示的Web应用
XSS Worm攻击、Stored XSS攻击
    在上述这些Web应用场景中,应当特别注意XSS漏洞。最常用于检测XSS的POC代码就是用于弹出警告消息的那句JavaScript:
javascript:alert('XSS');
    作为安全测试人员,除了尝试这种基本形式的POC之外,为了测试过滤系统的完备性,以下形式的测试用例往往可以给您一些启发,如表11-3-2所示。
表11-3-2 XSS测试用例
XSS测试用例
javascript:alert('XSS');
JaVaScRiPt:alert('XSS')
javascript:alert("XSS")
alert('XSS')
6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29
javascript:alert('XSS')
jav	ascript:alert('XSS')
<SCRIPT>a=/XSS/
alert(a.source)</SCRIPT>
<SCRIPT>alert("XSS");</SCRIPT>
AAA<SCRIPT>alert("XSS“)</SCRIPT>AAA
<ScRipt> alert("XSS");</SCRIPT>
    另外,一些非常敏感的HTML标签的过滤也要非常小心。这些TAG包括<applet>、<body>、<embed>、<frame>、<script>、<frameset>、<html>、<iframe>、<img>、<style>、<layer>、<ilayer>、<meta>、<object> 。
    在将文本返回给客户端浏览器时,对敏感字符进行编码替换是一个防御XSS攻击的简单而有效的办法,例如,对以下字符的编码替换,如表11-3-3所示。
表11-3-3 字符的编码替换
敏感字符
十进制编码
十六进制编码
HTML字符集
Unicode编码
"
&#34
&#x22
&quot
\u0022
'
&#39
&#x27
&apos
\u0027
&
&#38
&#x26
&amp
\u0026
&#60
&#x3C
&lt
\u003c
&#62
&#x3E
&gt
\u003e
 
本文节选自电子工业出版社2008年4月出版的《0day安全:软件漏洞分析技术》一书。
XSS的检测与防范_职场