2014-06-10 49 views
0

有很多关于这一主题的问题,但我没有找到一个对我们的特殊情况下,潜在的危险人物......的请求参数(不Request的!)

我们有一个高效运行的网站一次在一段时间内 - 每天大约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) 

但是从我的观点的一切似乎点没问题(这些确实是有效的URL,如果我在浏览器中键入它们,它们的工作)。

我们还在跟踪客户端IP和客户端用户代理,它们大多与一些抓取工具相关。是否有可能,他们正在构建触发这些错误的错误请求?

+0

你怎么知道这个错误发生了?谁引起了错误,该网站是否可公开访问?什么确切的请求提出这个信息? – CodeCaster

+0

我们在Global.asax中添加了错误处理程序,并接收有关错误的电子邮件通知。是的,该网站是公开访问的。请求正如问题所述 - 还有什么可以帮助的? – jor

回答

2

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

< > * % & : \ ? 

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

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

这可能是爬虫或有些浏览器使用逃脱含有%字符一样发送请求时。关于这个主题的更多阅读:Experiments In Wackiness Allowing Percents Angle brackets And Other Naughty Things In The ASPNETIIS RequestURL

+0

好点的荷兰水果;)。我们能否声明url是'/ relative/path/to/page?param1 = value&param2 = value'(具有double'?')? –

+0

不,问题不是过滤后的字符本身,而是这些字符不出现在Request.Path中,而是出现在Query中。他们绝对允许在那里。 – jor

+0

@PatrickHofmann:不,它不是URL中的双“?”。 – jor