例如,StackExchange 将 HTML 的子集列入白名单: https ://meta.stackexchange.com/questions/1777/what-html-tags-are-allowed-on-stack-exchange-sites
您如何在控制器中执行此操作以确保用户输入是安全的?
例如,StackExchange 将 HTML 的子集列入白名单: https ://meta.stackexchange.com/questions/1777/what-html-tags-are-allowed-on-stack-exchange-sites
您如何在控制器中执行此操作以确保用户输入是安全的?
这种方法与 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);
这可以在保存到数据库之前完成。优点是立即删除恶意内容,输出时不必担心。缺点是它不会处理任何现有的数据库内容,并且您必须在任何时候进行数据库更新时应用它。
另一种方法是每次输出内容时都使用此方法。
我很想听听首选的方法是什么。
您可以尝试 JSoup 解析器,它除了清理您的 HTML 输入外,还将提供许多开箱即用的功能。您可以访问http://jsoup.org/了解有关 JSoup 的更多详细信息并从那里下载二进制文件。它提供了 DOM 方法来遍历您的 HTML 树并获取所需的元素。
尽管清理 HTML 生成的代码以防止 XSS 攻击是一种很好的做法,但我强烈建议避免使用任何解析器通过清理 HTML 输入来避免 XSS 附加。如果您的 HTML 树非常大,那么响应时间会增加很多。在清理您的 HTML 树时,您应该确保无论用户在 FORM 中输入的内容是正确的,并且符合预期值。
您可以访问www.owasp.org以了解有关如何避免 XSS 攻击的更多信息。该站点为您提供了可能的备忘单,以确保您的 HTML 树不受任何 XSS 攻击。
ASP.NET HttpUtility.Htmlencode() 为您提供。但是如果你想阻止危险的脚本,首先不要将它插入到你的数据库中。首先,在插入数据库之前清理 HTML 文本。
我找到了一个为你做的课程:http: //eksith.wordpress.com/2012/02/13/antixss-4-2-breaks-everything/
它工作正常,您可以将新标签和属性添加到 Sanitizer 的自定义白名单中。
注意:Microsoft Sanitizer 和 Anti-XSS 库对我没有用。也许你也可以试试。