dvHTMLEncode()函数是笔者从ubbcode中提取的用于处理特殊字符串的函数。它能把尖括号之类的字符替换成HTML特殊字符集中的字符。
    HTML语言是标签语言,所有的代码用标签括起才有用,而所有标签用尖括号括起。尖括号不能发挥原来的作用之后,攻击者插入的代码便失去作用。dvHTMLEncode()函数的完整代码如下:
function dvHTMLEncode(byval fString)
if isnull(fString) or trim(fString)="" then
dvHTMLEncode=""
exit function
end if
fString = replace(fString, ">", ">")
fString = replace(fString, "<", "&lt;")
fString = Replace(fString, CHR(32), "&nbsp;")
fString = Replace(fString, CHR(9), "&nbsp;")
fString = Replace(fString, CHR(34), "&quot;")
fString = Replace(fString, CHR(39), "&#39;")
fString = Replace(fString, CHR(13), "")
fString = Replace(fString, CHR(10) & CHR(10), "</P><P> ")
fString = Replace(fString, CHR(10), "<BR> ")
dvHTMLEncode = fString
end function
    这个函数使用replace()函数替换字符串中的一些特殊字符,如果需要过滤其他特殊字符,可以试着添加。
    用dvHTMLEncode()函数把所有输入及输出的字符串过滤处理一遍,即可杜绝大部分的跨站漏洞。
    如简单留言本的漏洞是因为name中的body没有经过过滤而直接输出到页面形成的,代码如下:
<%=rs("name")%>
……
<%=rs("body")%>
    如下修改代码即可避免跨站漏洞:
<%=dvHTMLEncode( rs("name") )%>
……
<%= dvHTMLEncode( rs("body") )%>
    用dvHTMLEncode()函数过滤后输出,不会存在问题,也可以在用户提交时过滤后写到数据库中。
    为禁用JavaScript,单击IE中的“工具”|“Internet选项”|“安全”|“Internet”|“自定义级别”选项,找到“脚本”部分,把“活动脚本”设置成“禁用”状态。
    另外尽量不要访问安全性不高的网站,上网时打开杀毒软件的脚本监控功能,这样可以避免被恶意攻击者利用跨站脚本漏洞攻击的可能性。
 
本文节选自电子工业出版社2009年6月出版的《黑客攻防实战编程》一书。
预防和防御跨站漏洞_休闲