0

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

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

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

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 和客户端用户代理,它们主要与一些爬虫有关。是否有可能,他们正在构建一个触发这些错误的错误请求?

4

1 回答 1

2

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

< > * % & : \ ?

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

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

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

于 2014-06-10T07:20:37.497 回答