【问题标题】:Using MS Anti XSS library for sanitizing HTML使用 MS Anti XSS 库清理 HTML
【发布时间】:2010-01-08 23:33:18
【问题描述】:

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

我的理解是我可以使用AntiXSS.GetSafeHtmlFragment() 方法清理 HTML。只要我在将 HTML 存储到数据库中之前执行此操作,我是否会被覆盖?在网页上输出 HTML 时,我需要做什么吗?

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

【问题讨论】:

    标签: .net asp.net security xss antixsslibrary


    【解决方案1】:

    你应该准备好了。虽然显然这不会保护您免受数据库中已有任何内容的影响。

    您可以在输出页面而不是保存时使用AntiXSS.GetSafeHtmlFragment()。但是在储蓄时这样做可能更安全。不过,您不想在渲染和保存时都这样做。

    白名单不可编辑。

    【讨论】:

    • 不幸的是,AntiXSS.GetSafeHtmlFragment() 在旧版本中变得易受攻击而在新版本中变得无用(它几乎去除了所有可能的 HTML 标签)。
    【解决方案2】:

    关于你关于“黑匣子”的问题:是的,它是一个黑匣子,我的理解是你不能编辑它。如果您正在寻找更详细的信息,请查看AntiSamy.NET project

    【讨论】:

      【解决方案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/

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • ...记得清理 SQL 注入
        • 所以,如果用户输入了我使用 GetSafeHtmlFragment 清理的 HTML,那么我需要挖掘所有 URL(a href)和 JS 代码并通过 AntiXSS.UrlEncode 和 AntiXSS.JavaScriptEncode 传递?
        • 您需要为将要使用的上下文转义输出。通常人们通过使用模板系统来完成此操作,该模板系统在输出时自动转义,而不是单独检查每个字段。阅读我链接的整篇文章,它应该会有所帮助:msdn.microsoft.com/en-us/library/aa973813.aspx
        猜你喜欢
        • 2010-11-07
        • 2018-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-20
        • 2010-12-07
        相关资源
        最近更新 更多