关于这个主题有很多问题,但我找不到一个特殊情况......
我们有一个高效的网站运行,偶尔 - 每天大约5到10次 - 我们会收到有关潜在危险的Request.Path值的错误通知。这里奇怪的是,实际的“危险”字符不在请求路径中,而是在参数中。
在查看请求对象时,我们得到如下值:
HttpContext.Current.Request.Url.AbsolutePath --> /relative/path/to/page
HttpContext.Current.Request.Url.Query --> ?param1=value¶m2=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和客户端用户代理,它们主要与某些抓取工具相关。他们是否有可能建立一个错误的请求来触发这些错误?
答案 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