預防和防禦跨站漏洞


    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月出版的《******實戰編程》一書。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章