如何验证HTML输入以防止XSS?

Jas*_*eck 5 asp.net-mvc-3

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

你怎么能在你的控制器中做到这一点,以确保用户输入是安全的?

Jas*_*eck 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() 位于 HtmlSanitizationLibrary 中的 Microsoft.Security.Application.Sanitizer 下。

content = Sanitizer.GetSafeHtml(userInput);
Run Code Online (Sandbox Code Playgroud)

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

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

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