URL路由,图像处理程序和“潜在危险的Request.Path值”

问题描述 投票:39回答:2

我已经有相当一段时间遇到了这个问题,并决定通过在此处发布问题进行深思熟虑,尝试一劳永逸。我在位于.net 4的网站上有一个图像处理程序:

https://www.amadeupurl.co.uk/ImageHandler.ashx?i=3604(出于隐私考虑,已删除实际域)

现在这可以正常工作,并且可以毫无问题地从Web服务器提供图像,我说没有问题,因为如果我访问URL可以正常工作,则图像会加载,不会产生异常。但是,昨天有人确实访问了这个确切的URL,并在以下几行中引发了异常:

Exception Generated
Error Message:
A potentially dangerous Request.Path value was detected from the client (?).
Stack Trace:
at System.Web.HttpRequest.ValidateInputIfRequiredByConfig() at System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)

Technical Information:
DATE/TIME: 23/01/2013 03:50:01
PAGE: www.amadeupurl.co.uk/ImageHandler.ashx?i=3604

我了解错误消息,那不是问题,我只是不明白为什么会在这里生成错误消息,更糟糕的是,我无法复制它,就像我说我单击了图像加载的链接一样,也不例外。我正在使用URL路由并注册了要忽略的处理程序,以防以下代码引起问题:

routes.Ignore("{resource}.ashx")

我不确定为什么还会出现错误或尝试其他方法。

asp.net .net vb.net web-config httphandler
2个回答
93
投票

Asp.Net 4.0+带有非常严格的内置请求验证,其中一部分是URL中潜在的危险字符,这些字符可能会用于XSS攻击。这是url中的默认无效字符:

< > * % & : \ ?

您可以在配置文件中更改此行为:

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

或回到.Net 2.0验证:

<system.web>
    <httpRuntime requestValidationMode="2.0" />
</system.web>

[一个非常常见的无效字符是%,因此,如果偶然(攻击,网络抓取工具或只是一些非标准的浏览器),该URL被转义了,您会得到这个:]]

www.amadeupurl.co.uk/ImageHandler.ashx/%3Fi%3D3604

代替此:

www.amadeupurl.co.uk/ImageHandler.ashx/?i=3604

注意%3F?的转义字符。 Asp.Net请求验证程序认为该字符无效,并引发异常:

A potentially dangerous Request.Path value was detected from the client (?).

尽管在错误消息中,您再次看到字符(%3F)的未转义版本,再次为?

Here's a good article关于请求验证以及如何处理


0
投票

即使我遇到了这个问题,但对我来说,我不小心输入了&而不是?在URL

© www.soinside.com 2019 - 2024. All rights reserved.