【问题标题】:why the AntiXss and ValidateRequest ="true" is not working combinely?为什么 AntiXss 和 ValidateRequest ="true" 不能同时工作?
【发布时间】:2014-01-20 23:07:28
【问题描述】:

我试图避免在我的应用程序中使用横向脚本,但我的要求是我必须将包括脚本在内的数据保存到我的数据库中,但是当显示相同的数据时,它应该以文本而不是脚本的形式显示例如:

第 1 步:我在一个网站中有一个文本框,我试图通过以下代码注入

测试数据警报('恶意代码');

第 2 步:我将文本的确切内容保存在我的数据库中(注意 validateRequest 设置为 false)。

第 3 步:然后我在网页中显示该脚本不应该执行的内容。

注意:我已经通过 AntiXss 和 Sanitizer 对其进行了限制,但是当我使用 Sanitizer 时,脚本会被 Sanitizer 忽略,谁能给我一个解决方案,将脚本显示为文本(也应该避免执行脚本。)

【问题讨论】:

    标签: antixsslibrary validate-request sanitizer


    【解决方案1】:

    在你的情况下,

    “他们不应该一起工作”。您将您的 asp.net 验证与危险输入相冲突(尽管它来自 antixss 库)。

    Validate Request = "true" 是 ASP.Net 安全机制。它旨在通过过滤(使用启发式或白名单,我不确定)输入中的潜在危险标签来保护您免受 XSS 攻击。例如,如果您创建一个 ASP.Net 应用程序,如果是 Validate Request = "true",并且当您尝试输入查询字符串参数时,例如

    SaveProduct.aspx?q=<script>alert(1);</script>
    

    ,您将收到“从客户端检测到潜在危险的 Request.Form 值.. blah blah blah”。这就是 Validate Request = "true" 的作用,可以在页面级别或 web.config 中设置。

    现在,使用 antixss 库的重点是当您遇到像现在这样的情况时 - 接受用户输入(具有潜在危险的输入),将其保存在某处,然后将其显示给用户 - 您需要打开 ASP.Net 的验证请求。通过这样做,您是在告诉 ASP.Net 将 Web 应用程序的安全性留给您。你负责处理 XSS 漏洞,而不是 ASP.Net。在保存到数据库时,使用 antixss 的 GetSafeHtmlFragment() 方法来清理您的输入。另请注意antixss version 4.2.1 is known for strict escaping。

    在向有漏洞的用户显示内容时,您必须将其 HTML 编码到上下文中。例如,如果您要在 javascript、css 或 html 中输出具有潜在危险的字符串,则必须根据 javascript、css 或 html 编码对其进行编码。更多信息-What is the difference between AntiXss.HtmlEncode and HttpUtility.HtmlEncode?

    我建议您使用 antixss 库 html 编码来评估您的选择。但是您的解决方案是关闭验证请求。在保存到数据库之前使用 antixss(我更喜欢 Html Agility 包),并在页面的 html 上下文中显示之前使用 HtmlEncode()。 Rick Strahl 在这里有一个带有 Html Agility Pack 的示例实现 - http://weblog.west-wind.com/posts/2012/Jul/19/NET-HTML-Sanitation-for-rich-HTML-Input。

    请务必通读以下问题,以便深入理解并正确实施。

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 2019-09-11
      • 2015-10-12
      • 2017-02-06
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 2015-06-16
      • 2022-01-10
      相关资源
      最近更新 更多