2

根据MSDN AntiXss.UrlEncode 上的旧 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 属性,是否存在安全漏洞?

4

1 回答 1

2

Url Encode对用于锚标记的URL参数进行编码。

Html 属性编码对用于一般 HTML 属性的事物进行编码。

两种编码类型各不相同——HTML 属性编码中的不安全字符将变成 &xxx; 形式,在 URL 编码中它们会变成 %xxx。虽然出错可能不太可能导致安全问题,但您的数据将无法在浏览器中正确呈现或在请求中被理解。

(实际上,由于与旧版浏览器的不兼容,Url 编码可能会发生变化,并且 HTML 编码将在下一次 CTP 下降中发生变化,以允许安全列出特定的 Unicode 范围)。

于 2010-08-26T22:06:11.563 回答