使用MS Anti XSS库清理HTML

时间:2010-01-08 23:33:19

标签: .net asp.net security xss antixsslibrary

为了防止XSS攻击,我正在更新一个页面,在该页面中我们有一个接受HTML的文本框,将其存储在数据库中并在以后检索和呈现它。

我的理解是我可以使用AntiXSS.GetSafeHtmlFragment()方法清理HTML。只要我在将HTML存储到数据库之前执行此操作,我是否可以使用?当HTML在网页上输出时,我是否需要做任何事情?

此外,白名单似乎是一种黑盒子。有没有办法根据我们的要求更新这个?

4 个答案:

答案 0 :(得分:4)

你应该被设定。虽然显然这不会保护您免受数据库中已有的任何事情的影响。

您可以在输出页面时使用AntiXSS.GetSafeHtmlFragment(),而不是在保存时使用{{1}}。但是在保存时做的可能更安全。但是,在渲染和保存时,您不希望这样做。

白名单不可编辑。

答案 1 :(得分:3)

关于你关于“黑匣子”的问题:是的,它是一个黑盒子,我的理解是你无法编辑它。如果您正在寻找更多粒度,请查看AntiSamy.NET project

答案 2 :(得分:3)

在最新的4.x Anti-XSS库中,GetSafeHtml()和SetSafeHtmlFragment()位于Microsoft.Security.Application中的Sanitizer类下,该类已移至HtmlSanitizationLibrary程序集。

[弃用链接:http://www.microsoft.com/en-us/download/details.aspx?id=28589] 更新:看起来它已被移动到NuGet包中:https://www.nuget.org/packages/HtmlSanitizationLibrary/

答案 3 :(得分:1)

你快到了。您需要确保you choose the proper encoding。例如,如果用户输入进入url,则需要使用AntiXSS.UrlEncode(),如果进入JavaScript,则需要使用AntiXSS.JavaScriptEncode()。如果您无法保证何时保存输入的输出格式,最好在输出时进行清理。