2011-03-03 66 views
3

我以前看过这个错误,但似乎无法解决它。在这种情况下,我有一个ASHX页面,用一个可以发布XML的文本框来分发一个简单的HTML表单。当我尝试阅读表单时,我收到“潜在危险的Request.Form值...”。“潜在危险Request.Form”通用处理程序中的异常

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

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

该片段从.NET 3.5早此举4.0所以我猜这就是破损源自哪里。

任何想法如何解决ASHX页面的这个错误?

回答

6

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

<httpRuntime requestValidationMode="2.0" /> 

不幸的是,打开所有的网页高达2.0请求验证,所以我只能这样做,如果你有一个相对较小的攻击面。

1

虽然不是你的问题的直接答案,我会说读这个以前的帖子。它确实为您提供了一种确保不会引发错误的方法。从某种意义上讲,这是一种危险的方式,因为这意味着关闭基本保护。然而,答案是有道理的,而且它清楚地表明,只有在你对绝对确信你正在对所有输出进行编码时,才应该实现它。

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

作为一个方面说明,我也建议使用Microsoft Anti-Xss Library,而不是内置的Server.HtmlEncode功能。

但是,如果您可以修改ashx,则只需修改错误代码并添加“if”语句以便在错误消息中包含要过滤的字符串时不记录错误。

+0

怎样才能修改代码该处理程序绕过要过滤的字符串的请求验证? – Josh 2013-05-20 15:54:16

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 
相关问题