通用处理程序中的“潜在危险Request.Form”异常

时间:2011-03-03 22:03:36

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

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

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

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

这个片段早于从.NET 3.5迁移到4.0,所以我猜这是破损的起源。

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

3 个答案:

答案 0 :(得分:6)

修改了你的3.5-4.0更改是为ASP.NET 4.0加强了运行时安全功能。快速解决方法是应用以下属性:

<httpRuntime requestValidationMode="2.0" />

不幸的是,这会打开所有页面,最多可以进行2.0请求验证,所以如果你的攻击面相对较小,我只会这样做。

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:0)

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

  <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