请求参数中的潜在危险字符(不是Request.Path!)

时间:2014-06-10 07:06:19

标签: asp.net request-validation

关于这个主题有很多问题,但我找不到一个特殊情况......

我们有一个高效的网站运行,偶尔 - 每天大约5到10次 - 我们会收到有关潜在危险的Request.Path值的错误通知。这里奇怪的是,实际的“危险”字符不在请求路径中,而是在参数中。

在查看请求对象时,我们得到如下值:

HttpContext.Current.Request.Url.AbsolutePath --> /relative/path/to/page
HttpContext.Current.Request.Url.Query        --> ?param1=value&param2=value

ASP.NET抱怨params中的?

Message: A potentially dangerous Request.Path value was detected from the client (?). (System.Web.HttpException)

Stacktrace: 
   at System.Web.HttpRequest.ValidateInputIfRequiredByConfig()
   at System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)

但是从我的观点来看,一切似乎都很好(这些确实是有效的网址,如果我在浏览器中输入它们就会有效)。

我们还跟踪客户端IP和客户端用户代理,它们主要与某些抓取工具相关。他们是否有可能建立一个错误的请求来触发这些错误?

1 个答案:

答案 0 :(得分:2)

您可能正在使用asp.net 4.0或更高版本。它比以前的版本更“挑剔”。默认情况下会过滤以下字符:

< > * % & : \ ?

您可以在web.config中更改这些内容:

<httpRuntime requestPathInvalidCharacters="<,>,*,%,&,:,\,?" />

可能是抓取工具或某些浏览器在发送请求时使用包含%的转义字符。关于这个主题的更多阅读:Experiments In Wackiness Allowing Percents Angle brackets And Other Naughty Things In The ASPNETIIS RequestURL