奇怪的ValidateInputIfRequiredByConfig错误

时间:2011-11-14 16:11:53

标签: asp.net asp.net-mvc asp.net-mvc-3

我收到ValidateInputIfRequiredByConfig()引起的随机异常。

我没有确切的消息,因为我们的服务器是pt-BR,因此会翻译错误消息。

我知道如果用户将恶意代码放入输入中,例如,可能会抛出此错误。但这不是个案。

我正在收到这个,请求一些图片。以下来自elmah的一些信息。

HTTP_USER_AGENT:    GbPlugin
PATH_INFO:          /Content/images/BannerWelcome.jpg?1110311762734
PATH_TRANSLATED:    C:\inetpub\wwwroot\Content\images\BannerWelcome.jpg?1110311762734
REQUEST_METHOD:     GET
SCRIPT_NAME:        /Content/images/BannerWelcome.jpg?1110311762734

应用程序是ASP.NET MVC 3,在Windows 2008,IIS 7.5上运行

修改

pt-BR中的异常消息:

System.Web.HttpException
Um valor possivelmente perigoso Request.Path foi detectado no cliente (?).

System.Web.HttpException (0x80004005): Um valor possivelmente perigoso Request.Path foi detectado no cliente (?).
   em System.Web.HttpRequest.ValidateInputIfRequiredByConfig()
   em System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)

修改

英文异常消息:“从客户端Request.Path检测到潜在危险值”

编辑2:

我无法重现此错误。据我所知,这只是对这张图片的要求。

2 个答案:

答案 0 :(得分:4)

<pages validateRequest="false" />

在MVC3中不起作用。

1)您必须在每个控制器或操作

上明确放置[ValidateRequest(false)]

2)如果你使用.NET4,这还不够,因为.NET4中有一个“bug / feature”阻止[ValidateInput(false)]工作。 您还必须使用requestValidationMode 2.0禁用requestPathInvalidCharacters,validateRequest和requestFiltering:

<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="" />

答案 1 :(得分:2)

我做了三处修改来解决这个问题:

1)

<system.web>
    <httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="" />
     </system.web>

2)

<system.webServer>      
    <security>  <requestFiltering allowDoubleEscaping="true" /> </security>
    </system.webServer>

3)<pages validateRequest="false" />