【问题标题】:"Potentially Dangerous Request.Form" Exception in a generic handler通用处理程序中的“潜在危险的 Request.Form”异常
【发布时间】:2011-07-08 09:56:10
【问题描述】:

我以前见过这个错误,但似乎无法绕过它。在这种情况下,我有一个 ASHX 页面,它输出一个简单的 HTML 表单,其中包含一个可以发布 XML 的文本框。当我尝试阅读表单时,我收到“有潜在危险的 Request.Form 值...”。

由于它是一个通用处理程序,因此“ValidateRequest”属性不可用。但是我已经在 web.config 中定义了这个:

<location path="xml/MyGenericHandler.ashx">
    <system.web>
      <pages validateRequest="false" />
    </system.web>
</location>

这个 sn-p 早于从 .NET 3.5 到 4.0 的迁移,所以我猜这就是损坏的起源。

知道如何解决 ASHX 页面的这个错误吗?

【问题讨论】:

    标签: asp.net validation ashx generic-handler dangerous-request


    【解决方案1】:

    您最好只为您的处理程序页面禁用验证:

      <location path="MyGenericHandler.ashx">
        <system.web>
          <!-- requestValidationMode is to avoid HTML-validation of data posted to the handler -->
          <httpRuntime requestValidationMode="2.0"/>
        </system.web>
      </location>
    

    或者在你的处理程序中使用这个属性来避免触发异常:

    context.Request.Unvalidated.Form
    

    【讨论】:

      【解决方案2】:

      3.5-4.0 的改变是 ASP.NET 4.0 的一些增强的运行时安全特性。快速修复是应用以下属性:

      <httpRuntime requestValidationMode="2.0" />
      

      不幸的是,这会打开最高 2.0 请求验证的所有页面,所以我只会在攻击面相对较小的情况下这样做。

      【讨论】:

        【解决方案3】:

        虽然不能直接回答您的问题,但我想说阅读上一篇文章。它确实为您提供了一种确保不会引发错误的方法。从某种意义上说,这是一种冒险的方式,因为这意味着关闭基本保护。但是,答案是有充分理由的,并且它明确指出只有在您绝对确定您正在编码所有输出时才应该实施它。

        A potentially dangerous Request.Form value was detected from the client

        作为旁注,我还建议使用 Microsoft Anti-Xss Library 而不是内置的 Server.HtmlEncode 函数。

        但是,如果您可以修改 ashx,则更简单的解决方案是仅修改错误代码并添加“if”语句以在错误消息包含您要过滤的字符串时不记录错误。

        【讨论】:

        • 如何修改处理程序中的代码以绕过仅对要过滤的字符串的请求验证?
        猜你喜欢
        • 2010-12-25
        • 1970-01-01
        • 2011-11-09
        • 2011-07-23
        • 2011-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-30
        相关资源
        最近更新 更多