为了防止 XSS 攻击,我正在更新一个页面,其中我们有一个接受 HTML 的文本框,将其存储在数据库中,并在以后检索和呈现它。
我的理解是我可以使用AntiXSS.GetSafeHtmlFragment()
方法清理 HTML。只要我在将 HTML 存储在数据库中之前执行此操作,我就被覆盖了吗?在网页上输出 HTML 时,我需要做什么吗?
此外,白名单似乎是一种黑匣子。有没有办法根据我们的要求更新它?
为了防止 XSS 攻击,我正在更新一个页面,其中我们有一个接受 HTML 的文本框,将其存储在数据库中,并在以后检索和呈现它。
我的理解是我可以使用AntiXSS.GetSafeHtmlFragment()
方法清理 HTML。只要我在将 HTML 存储在数据库中之前执行此操作,我就被覆盖了吗?在网页上输出 HTML 时,我需要做什么吗?
此外,白名单似乎是一种黑匣子。有没有办法根据我们的要求更新它?
你应该被设置。尽管显然这不会保护您免受数据库中已有的任何内容的影响。
您可以AntiXSS.GetSafeHtmlFragment()
在输出页面时使用,而不是在保存时使用。但是在储蓄时这样做可能更安全。不过,您不想在渲染和保存时都这样做。
白名单不可编辑。
关于你关于“黑匣子”的问题:是的,它是一个黑匣子,我的理解是你不能编辑它。如果您正在寻找更多粒度,请查看AntiSamy.NET 项目。
在最新的 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/
您快到了。您需要确保选择正确的编码。例如,如果用户输入进入 url,则需要使用 AntiXSS.UrlEncode(),如果进入 JavaScript,则需要使用 AntiXSS.JavaScriptEncode()。如果在保存输入时无法保证输出格式是什么,最好在输出时进行清理。