为什么使用包含冒号的URL被视为“潜在危险请求”?

时间:2010-07-27 09:57:36

标签: asp.net security http url asp.net-4.0

有人(可能是机器人)向我的ASP.NET 4.0 Web表单应用程序(在IIS 7.0上运行)发送了带有以下URL的请求:

http://ipaddress-of-my-applications-domain/bla1.bla2.bla3.bla4.bla5:)

这导致了System.Web.HttpException。我收到了来自我配置的ASP.NET HealthMonitoring的日志邮件,告诉我:

从客户端检测到潜在危险的Request.Path值(:)。

堆栈跟踪是:

System.Web.HttpRequest.ValidateInputIfRequiredByConfig()
System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)

为什么网址中的冒号“有潜在危险”?使用这样的URL可以做些什么危险的事情?我在这里有任何安全漏洞我不知道吗?

感谢提前解释!

修改

我已经测试过查询字符串中的冒号(如http://mydomain.com?Test=9:))不会导致此异常。

4 个答案:

答案 0 :(得分:20)

在NTFS上,给定的文件路径可以有多个关联的数据流。除了主流(也称为$DATA)之外,还可以有其他流,通常用于存储下载文件中的Internet区域标记等元数据。

使用冒号分隔符访问

Alternate Data Streams,例如。 file.dat:$DATA是另一种说file.dat的方式。 ADS通过网络的存在导致了微软过去的一些安全问题(例如,返回ASP页面的源代码而不是执行它们),所以作为预防措施,他们阻止在路径部分使用冒号。 URL,因为路径部分经常映射到文件系统(虽然不是你的情况)。这不太可能从查询字符串中发生,因此不会在那里被阻止。

这远远不是最严重的误报率请求验证将产生的。它的抗注射功能更糟糕。我个人总是会禁用它,因为它是一个愚蠢的破坏功能,永远不会让你的webapp安全;只有适当注意字符串转义(以及你计划用作文件名的任何东西的重度消毒)才能做到这一点。

还有其他字符,即使您关闭请求验证,也无法将路径部分放入路由部分。特别是,斜杠(%2F%5C和字节序列,它们将解析相同的UTF-8序列无效)和零字节。最好保守一般的路径。

答案 1 :(得分:1)

我完全不记得,但Internet Explorer与操作系统联系在一起,它能够执行一些不好的事情,比如“con:sss”能够打开控制台并执行一些批处理命令等,冒号之前的任何事情都被认为是协议和Windows允许您覆盖/创建可由您的dll打开和使用的新协议。任何对com和url monikers有更多经验的人都可以给你非常正确的答案。

答案 2 :(得分:0)

这是由于ASP.NET的请求验证功能,它可以防止客户端攻击您的网站。默认情况下启用该功能。

以下链接更好地解释了:http://www.asp.net/learn/whitepapers/request-validation

答案 3 :(得分:0)

我为与此处的流程不一致而提前表示歉意,但我看不到编码“:”如何防止注入攻击。

原始海报通过Web服务器软件(而不是HTTP协议)保护不受“:”保护。

必须对URL进行解码才能对网站应用程序有用。那么,如果网站打算在使用URL之前对其进行解码,那么如何更安全地编码“:”呢?