有人(可能是机器人)向我的ASP.NET 4.0 web窗体应用程序(在IIS7.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中的冒号是“潜在的危险”?使用这样的URL可以做什么危险的事情?我在这里有什么安全漏洞吗?
谢谢你提前解释!
编辑
我已经测试过,查询字符串(如http://mydomain.com?Test=9:))中的冒号不会导致此异常。
发布于 2010-07-27 10:43:36
在NTFS上,给定的文件路径可以有多个关联的数据流。除了主流流(也称为$DATA )之外,还可以有其他流,通常用于在下载的文件中存储诸如Internet标记的元数据。
使用冒号分隔符访问交替数据流,例如。file.dat:$DATA是file.dat的另一种说法。过去,ADS通过网络的存在给微软带来了一些安全问题。返回ASP页面的源代码而不是执行它们),因此为了预防起见,他们在URL的路径部分阻止使用冒号,因为路径部分通常映射到文件系统(尽管在您的情况下不是这样)。这不太可能发生在查询字符串中,因此不会被阻塞。
这远不是最坏的假阳性请求验证会产生的结果。它的抗注入特性要差得多。我个人总是会禁用它,因为它是一个愚蠢的坏功能,永远无法使您的use应用程序的安全;只有适当地注意字符串转义(以及对任何您计划用作文件名的内容进行大量清理)才能做到这一点。
还有其他字符,即使关闭了请求验证,也不能为路由目的将路径部分放入其中。特别是斜杠(%2F、%5C和将无效的超长UTF-8序列解析为相同的字节序列)和零字节。在一般的道路上,最好是保守的。
发布于 2010-07-27 10:45:37
我不完全记得,但是Internet与操作系统联系在一起,它能够执行一些不好的事情,比如"con:sss“能够打开控制台和执行一些批处理命令等等,在冒号被视为协议和窗口之前,任何东西都可以覆盖/创建可以由dll打开和使用的新协议。任何对com和url绰号有更多经验的人都可以给出非常正确的答案。
发布于 2010-07-27 10:07:13
这是由于ASP.NET的请求验证功能,它防止客户端攻击您的网站。默认情况下启用该功能。
下面的链接更好地解释了:http://www.asp.net/learn/whitepapers/request-validation
https://stackoverflow.com/questions/3342443
复制相似问题