5

例如,StackExchange 将 HTML 的子集列入白名单: https ://meta.stackexchange.com/questions/1777/what-html-tags-are-allowed-on-stack-exchange-sites

您如何在控制器中执行此操作以确保用户输入是安全的?

4

3 回答 3

2

这种方法与 StackExchange 不同,但我发现 AntiXSS 4.x 库是一种清理输入以允许“安全”HTML 的简单方法。

http://www.microsoft.com/en-us/download/details.aspx?id=28589您可以在此处下载一个版本,但我将其链接为有用的 DOCX 文件。我的首选方法是使用 NuGet 包管理器来获取最新的 AntiXSS 包。

您可以使用 4.x AntiXss 库中的 HtmlSanitizationLibrary 程序集。请注意,GetSafeHtml() 位于 Microsoft.Security.Application.Sanitizer 下的 HtmlSanitizationLibrary 中。

content = Sanitizer.GetSafeHtml(userInput);

这可以在保存到数据库之前完成。优点是立即删除恶意内容,输出时不必担心。缺点是它不会处理任何现有的数据库内容,并且您必须在任何时候进行数据库更新时应用它。

另一种方法是每次输出内容时都使用此方法。

我很想听听首选的方法是什么。

于 2012-06-23T07:13:02.007 回答
0

您可以尝试 JSoup 解析器,它除了清理您的 HTML 输入外,还将提供许多开箱即用的功能。您可以访问http://jsoup.org/了解有关 JSoup 的更多详细信息并从那里下载二进制文件。它提供了 DOM 方法来遍历您的 HTML 树并获取所需的元素。

尽管清理 HTML 生成的代码以防止 XSS 攻击是一种很好的做法,但我强烈建议避免使用任何解析器通过清理 HTML 输入来避免 XSS 附加。如果您的 HTML 树非常大,那么响应时间会增加很多。在清理您的 HTML 树时,您应该确保无论用户在 FORM 中输入的内容是正确的,并且符合预期值。

您可以访问www.owasp.org以了解有关如何避免 XSS 攻击的更多信息。该站点为您提供了可能的备忘单,以确保您的 HTML 树不受任何 XSS 攻击。

于 2012-06-23T08:00:12.240 回答
0

ASP.NET HttpUtility.Htmlencode() 为您提供。但是如果你想阻止危险的脚本,首先不要将它插入到你的数据库中。首先,在插入数据库之前清理 HTML 文本。

我找到了一个为你做的课程:http: //eksith.wordpress.com/2012/02/13/antixss-4-2-breaks-everything/

它工作正常,您可以将新标签和属性添加到 Sanitizer 的自定义白名单中。

注意:Microsoft Sanitizer 和 Anti-XSS 库对我没有用。也许你也可以试试。

于 2012-08-07T12:11:43.083 回答