2010-08-26 18 views
2

據對MSDN AntiXss.UrlEncode舊AntiXss物品用於編碼鏈路HREF(在下面的例子中不可信輸入):AntiXss.UrlEncode與在鏈路AntiXss.HtmlAttributeEncode使用(A HREF)

<a href="http://search.msn.com/results.aspx?q=[Untrusted-input]">Click Here!</a> 

我的理解是,UrlEncode只能在設置URL到URL時才使用,就像使用JS設置document.location一樣。那麼爲什麼我在前面的例子中不使用HtmlAttributeEncode來編碼[Untrusted-input]呢?另一方面,如果使用UrlEncode對HTML屬性進行編碼,那麼是否存在安全缺陷?

回答

2

Url編碼編碼URL 參數用於錨定標記。

Html屬性編碼器對通用HTML屬性中使用的東西進行編碼。

兩種編碼類型都有所不同 - HTML屬性編碼中的不安全字符會變成&xxx;表單,在URL編碼中它們會變成%xxx。雖然可能不太可能導致安全問題,但您的數據無法在瀏覽器中正確呈現,或在請求中理解。 (實際上,Url編碼可能會因爲與舊版瀏覽器不兼容而改變,並且下一個CTP版本中的HTML編碼會發生變化,以便安全地列出特定的Unicode範圍)。