18

当您可以简单地使用 对数据进行编码时HttpUtility.HtmlEncode,我们为什么要使用AntiXss.HtmlEncode

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

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

4

4 回答 4

20

您无法使用 AntiXSS 库指定或更改白名单,这在您考虑时并不奇怪。AntiXSS 库默认编码所有不在以下范围内的字符:0..9a..zA..Z。这组字符是安全的(因此在白名单上),不需要对它们进行编码。请注意,AntiXSS 库有不同的 javascript、html 和 url 编码列表。请不要对 url 使用 html 编码,因为您的应用程序中会存在安全漏洞。

请注意,上的白名单与上HtmlEncode的白名单不同GetSafeHtmlFragmentHtmlEncode你说“请对不在白名单上的每个字符进行编码GetSafeHtmlFragment”,然后说“请删除所有不在白名单上的标签和属性”。

当您使用 ASP.NET 4.0 时,我建议您不要(直接)使用 AntiXSS 库,而只需使用内置机制(例如 HttpUtility)来编码 Html。ASP.NET 4.0允许您在配置文件中配置一个 HttpEncoder。您可以编写自己的HttpEncoder使用 AntiXSS 库的库(AntiXSS 库的未来版本可能会包含一个HttpEncoder实现)。通过这样做,您的整个应用程序(以及所有 ASP.NET 控件和自定义控件)将使用白名单编码而不是黑名单编码。

ASP.NET 4.0 还为编码文本引入了一个新的代码块。您可以使用名字:<%: Model.FirstName %>。但是,我个人觉得<%= HttpUtility.HtmlEncode(Model.FirstName) %>更明确。

于 2010-02-24T13:38:25.827 回答
9

白名单总是比黑名单更安全——只要想想哪个更安全,列出所有不允许参加聚会的人只允许参加聚会的人。(基本上黑名单只能处理明显的或以前使用过的攻击)。

于 2010-01-07T17:44:52.467 回答
1

AntiXss 库还包括 Javascript 或属性等的 Encode 方法。

于 2010-01-07T17:40:18.623 回答
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>
于 2016-10-19T06:26:07.650 回答