如果您只想使用HttpUtility.HtmlEncode
对数据进行编码,我们为什么要使用AntiXss.HtmlEncode
?
为什么白名单比黑名单更好?
此外,在Anti XSS库中,我在哪里指定白名单?
答案 0 :(得分:18)
您无法使用AntiXSS库指定或更改白名单,这在您考虑时并不奇怪。默认情况下,AntiXSS库会编码不在以下范围内的所有字符:0..9a..zA..Z。这组字符是安全的(因此在白名单上)并且不需要对它们进行编码。请注意,AntiXSS库有不同的列表,用于编码javascript,html和url。请不要使用html编码作为url,因为你的应用程序中会有一个安全漏洞。
请注意,HtmlEncode
上的白名单与GetSafeHtmlFragment
上的白名单不同。使用HtmlEncode
,您说'请编码每个不在白名单上的字符',GetSafeHtmlFragment
您说'请删除所有标记和属性那些不在白名单上。
当您使用ASP.NET 4.0时,我建议您不要直接使用AntiXSS库,而只需使用内置机制(例如HttpUtility)来编码Html。 ASP.NET 4.0 allows you to configure a HttpEncoder in the configuration file。您可以编写自己使用AntiXSS库的HttpEncoder
(很可能未来版本的AntiXSS库将包含HttpEncoder
实现)。通过这样做,您的整个应用程序(以及所有ASP.NET控件和自定义控件)将使用白名单编码而不是黑名单编码。
ASP.NET 4.0还引入了new code block for encoded text。您可以使用名字:<%: Model.FirstName %>
。但是,我个人认为<%= HttpUtility.HtmlEncode(Model.FirstName) %>
更明确。
答案 1 :(得分:7)
白名单总是比黑名单更安全 - 只考虑哪些更安全,列出所有不允许参加你的聚会或只允许参加聚会的人。 (基本上黑名单只能处理明显或之前使用过的攻击)。
答案 2 :(得分:1)
AntiXss库还包括Javascript或属性等的编码方法。
答案 3 :(得分:0)
我尝试实现AntiXss库,它确实可以很好地删除脚本标记。但是没有用HTML做到这一点。见下面的例子
<a href="http://west-wind.com">West Wind</a><br>Hello<br>Please login with the form below before proceeding:<form action="”mybadsite.aspx”"><table><tbody><tr><td>Login:</td><td><input type="text" name="x_x_x_x_x_x_x_x_x_x_x_x_x_login"></td></tr><tr><td>Password:</td><td><input type="text" name="x_x_x_x_x_x_x_x_x_x_x_x_x_password"> </td></tr></tbody></table><input type="submit" value="LOGIN"></form>