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

Sla*_*uma 19 asp.net security url http 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)
Run Code Online (Sandbox Code Playgroud)

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

感谢提前解释!

编辑

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

bob*_*nce 20

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

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

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

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

  • 如果您使用值"bla1.bla2.bla3.bla4.bla5:)`仅作为路由参数而从不作为实际文件名,则没有漏洞.(在Windows上清理用户输入用作文件名确实是一项艰巨的任务,比这个问题更复杂.避免一般使用用户提供的文件名内容.)不要相信任何请求验证,它不并且无法保护您免受一般情况下的漏洞的影响,*将*阻止完全有效的输入. (3认同)
  • 这对NT4来说真是太过分了,例如http://www.securityfocus.com/bid/149/discuss (2认同)