根据关于MSDN的旧AntiXss文章,AntiXss.UrlEncode用于编码链接href(以下示例中的Untrusted-input):
<a href="http://search.msn.com/results.aspx?q=[Untrusted-input]">Click Here!</a>
我的理解是,只有在设置URL的时候才应该使用UrlEncode,比如在使用JS设置document.location时。那么为什么我不在前面的例子中使用HtmlAttributeEncode来编码[Untrusted-input]?另一方面,如果我使用UrlEncode对HTML属性进行编码,就会出现安全漏洞吗?
答案 0 :(得分:2)
Url Encode对网址参数进行编码,以便在锚标记中使用。
Html属性编码对用于一般HTML属性的内容进行编码。
两种编码类型各不相同 - HTML属性编码中的不安全字符将变为&amp; xxx;表单,在URL编码中,它们将变成%xxx。虽然可能不太可能出错导致安全问题,但您的数据无法在浏览器中正确呈现,或在请求中被理解。
(事实上,由于与旧浏览器不兼容,Url编码可能会发生变化,并且HTML编码将在下一个CTP丢弃中发生变化,以便安全列出特定的Unicode范围。)