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



关于这个话题有很多问题,但我没有找到一个适合我们特殊情况的问题。

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

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

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

ASP。. NET正在抱怨参数中的?:

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)

但是从我的角度来看,一切似乎都很好(这些确实是有效的url,如果我在浏览器中输入它们,它们确实工作)。

我们也在跟踪客户端IP和客户端用户代理,它们大多与一些爬虫相关。有没有可能,他们正在构建一个错误的请求,从而触发了这些错误?

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

< > * % & :  ?

你可以在你的web.config中修改这些:

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

可能是爬虫或某些浏览器在发送请求时使用包含%的转义字符。关于这个主题的更多阅读:在ASPNETIIS中允许百分比尖括号和其他顽皮事物的古怪实验RequestURL

相关内容

最新更新