最近手頭在做一個asp老系統的xss脆弱性對應。
暫定的對應方案是,在服務器端把特殊字符轉義在回傳客戶端瀏覽器,比如:< 轉義為 < 。但遇到了一個問題,請各位大神賜教。
設計的時候是準備在服務器端加兩個方法,
方法一,把客戶端傳來的引數里包含的特殊字符轉義傳回客戶端。
方法二,把客戶端傳回服務器端準備存DB的資料中包含的轉義字符轉回本來的樣子,在進行半角變全角無害化之后存庫。
實際運用中發現,方法一達到預期效果,但方法二好像沒有必要,好像客戶端傳回服務器的引數中如果包含了轉義字符,在服務器端決議取值的時候會變成轉義前的樣子。
想找一些理論依據但始終沒找到,請問各位大神,包含轉義字符的引數值post回服務器后,轉義字符變回原來的樣子是瀏覽器還是服務器的功能?主流的瀏覽器都是這樣嗎?
uj5u.com熱心網友回復:
不管哪端 做好轉換就可以了Function HtmlDecode(ByVal s)
If Has(s) Then
s = regReplace(s, "<br\s*/?\s*>", vbCrLf)
s = Replace(s, " ", Chr(9))
s = Replace(s, """, Chr(34))
s = Replace(s, " ", Chr(32))
s = Replace(s, "'", Chr(39))
s = Replace(s, "'", Chr(39))
s = Replace(s, ">", ">")
s = Replace(s, "<", "<")
s = Replace(s, "&", Chr(38))
s = Replace(s, "&", Chr(38))
s = Replace(s, "×", "×")
s = Replace(s, "÷", "÷")
s = Replace(s, "¼", "?")
s = Replace(s, "½", "?")
s = Replace(s, "¾", "?")
s = Replace(s, "±", "±")
s = Replace(s, "«", "?")
s = Replace(s, "»", "?")
s = Replace(s, "©", "?")
s = Replace(s, "®", "?")
s = Replace(s, "°", "°")
End If
HtmlDecode = s
End Function
uj5u.com熱心網友回復:
謝謝回答,不過這個轉換我覺得還是要在服務器端做,因為客戶端js轉換和check是可以用攔截器繞過去直接修改提交給服務器的資料的,我們這個系統也是被這種鑒定部門繞過js植入的代碼。
uj5u.com熱心網友回復:
用HTMLEncodeuj5u.com熱心網友回復:
瀏覽器的功能。uj5u.com熱心網友回復:
防御XSS:一句話送給樓主:
輸入過濾,輸出編碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/32044.html
標籤:ASP
