URL路由,图像处理程序和“有潜在危险的Request的价值”(URL Routing, Image

2019-07-18 13:51发布

我一直在遇到这个问题相当一段时间,并已决定尝试采用在这里张贴问题的一些思考得到的是一劳永逸的底部。 我在这里设一个.NET 4的网站的图像处理程序:

https://www.amadeupurl.co.uk/ImageHandler.ashx?i=3604 (隐私去除实际域)

现在这工作正常,从没有问题的Web服务器提供的图像,我说没有问题,因为如果我访问它工作正常的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")

我不知道为什么别的我会得到错误或什么别的尝试。

Answer 1:

Asp.Net 4.0 +配备了一个非常严格的内置的请求验证,它的一部分是可以在跨站脚本攻击中使用的URL的潜在危险的人物。 下面是在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)的转义版本? 再次

这里有一个很好的文章上请求验证以及如何处理它



文章来源: URL Routing, Image Handler & “A potentially dangerous Request.Path value”