首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用包含冒号的URL被认为是“潜在的危险请求”?

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

Stack Overflow用户
提问于 2010-07-27 09:57:36
回答 3查看 14.9K关注 0票数 20

有人(可能是机器人)向我的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值

堆栈跟踪是:

代码语言:javascript
复制
System.Web.HttpRequest.ValidateInputIfRequiredByConfig()
System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)

为什么URL中的冒号是“潜在的危险”?使用这样的URL可以做什么危险的事情?我在这里有什么安全漏洞吗?

谢谢你提前解释!

编辑

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-27 10:43:36

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

使用冒号分隔符访问交替数据流,例如。file.dat:$DATAfile.dat的另一种说法。过去,ADS通过网络的存在给微软带来了一些安全问题。返回ASP页面的源代码而不是执行它们),因此为了预防起见,他们在URL的路径部分阻止使用冒号,因为路径部分通常映射到文件系统(尽管在您的情况下不是这样)。这不太可能发生在查询字符串中,因此不会被阻塞。

这远不是最坏的假阳性请求验证会产生的结果。它的抗注入特性要差得多。我个人总是会禁用它,因为它是一个愚蠢的坏功能,永远无法使您的use应用程序的安全;只有适当地注意字符串转义(以及对任何您计划用作文件名的内容进行大量清理)才能做到这一点。

还有其他字符,即使关闭了请求验证,也不能为路由目的将路径部分放入其中。特别是斜杠(%2F%5C和将无效的超长UTF-8序列解析为相同的字节序列)和零字节。在一般的道路上,最好是保守的。

票数 22
EN

Stack Overflow用户

发布于 2010-07-27 10:45:37

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

票数 1
EN

Stack Overflow用户

发布于 2010-07-27 10:07:13

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3342443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档