为什么要使用Microsoft AntiXSS库?

时间:2010-01-07 17:37:20

标签: .net asp.net xss antixsslibrary

如果您只想使用HttpUtility.HtmlEncode对数据进行编码,我们为什么要使用AntiXss.HtmlEncode

为什么白名单比黑名单更好?

此外,在Anti XSS库中,我在哪里指定白名单?

4 个答案:

答案 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>