【问题标题】:Potentially dangerous characters in Request Parameters (not Request.Path!)请求参数中的潜在危险字符(不是 Request.Path!)
【发布时间】:2014-07-30 20:30:40
【问题描述】:

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

我们有一个高效的站点正在运行,并且偶尔(每天大约 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 和客户端用户代理,它们大多与一些爬虫有关。是否有可能,他们正在构建一个触发这些错误的错误请求?

【问题讨论】:

  • 你怎么知道发生了这个错误?谁造成了错误,该网站是否可以公开访问?什么确切的请求会引发该信息?
  • 我们在 Global.asax 中添加了一个错误处理程序,并接收有关错误的电子邮件通知。是的,该网站可公开访问。该请求如问题中所述 - 还有什么有用的?

标签: asp.net request-validation


【解决方案1】:

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

< > * % & : \ ?

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

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

可能是爬虫或某些浏览器在发送请求时确实使用了包含 % like 的转义字符。有关该主题的更多阅读:Experiments In Wackiness Allowing Percents Angle brackets And Other Naughty Things In The ASPNETIIS RequestURL

【讨论】:

  • 好点荷兰水果;)。我们可以说网址类似于/relative/path/to/page??param1=value&amp;param2=value(有双?)吗?
  • 不,问题不在于过滤字符本身,而是这些字符没有出现在Request.Path 中,而是出现在Query 中。他们是绝对允许进入的。
猜你喜欢
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多