Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 为什么使用包含冒号的URL会被视为;“潜在危险请求”;?_Asp.net_Security_Http_Url_Asp.net 4.0 - Fatal编程技术网

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

Asp.net 为什么使用包含冒号的URL会被视为;“潜在危险请求”;?,asp.net,security,http,url,asp.net-4.0,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的日志电子邮件,告诉我: 潜在危险的请求。从客户端(:)检测到路径值。 堆栈跟踪为: System.W

有人(可能是机器人)向我的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的日志电子邮件,告诉我:

潜在危险的请求。从客户端(:)检测到路径值。

堆栈跟踪为:

System.Web.HttpRequest.ValidateInputIfRequiredByConfig()
System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)
为什么URL中的冒号是“潜在危险的”?使用这样的URL可以做什么危险的事情?这里有我不知道的安全漏洞吗

感谢您提前解释

编辑


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

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


下面的链接解释得更好:

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

使用冒号分隔符访问,例如,
file.dat:$DATA
是表示
file.dat
的另一种方式。在过去,通过web出现ADS会导致Microsoft出现一些安全问题(例如,返回ASP页面的源代码而不是执行它们),因此作为预防措施,他们会阻止在URL的路径部分使用冒号,因为路径部分通常映射到文件系统(尽管在您的情况下不是这样)。这不太可能在查询字符串中发生,因此不会在那里被阻止

这远远不是验证将产生的最糟糕的误报请求。它的抗注入特性要差得多。我个人总是会禁用它,因为它是一个愚蠢的坏功能,实际上永远不会使你的webapp安全;只有适当注意字符串转义(以及对计划用作文件名的任何内容进行严格清理)才能做到这一点


还有其他一些字符,即使您关闭了请求验证,也无法出于路由目的放入路径部分。特别是斜杠(
%2F
%5C
,以及解析为相同的超长UTF-8序列无效的字节序列)和零字节。一般来说,最好对路径中的内容保持保守。

我记不太清楚了,但Internet Explorer与操作系统有关,它能够执行一些不好的操作,例如“con:sss”能够打开控制台并执行一些批处理命令等,冒号之前的任何内容都被视为协议,windows允许您覆盖/创建可由dll打开和使用的新协议。任何对com和url名字有更丰富经验的人都可能会给你非常正确的答案。

我为与此处的流程不一致提前道歉,但我看不出编码“:”应该如何防止注入攻击

原始海报是由webserver软件而不是HTTP协议保护的,不受“:”的影响


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

请看这个问题--我不认为它是重复的,但确实讨论了URL中的冒号此页面列出了保留字符表中的冒号,但没有解释它的用途。谢谢链接!但这个问题似乎更需要讨论冒号对于URL编码是否“安全”。我遇到的ASP.NET异常听起来更像是安全威胁。我同意,但问题答案中的任何链接都有帮助吗?我检查了一些,它们没有帮助。其他一些(RFC…的)我现在诚实地跳过了——在看了相当小的垂直滚动条之后。我希望这里有人能用几句话给出答案。为什么URL中的冒号是“注入攻击”?我知道请求验证功能,但到目前为止只在提交表单值时使用,表单值包含标签或任何带有
的文本。对不起,不是这样。我重新措辞了。不过,它确实存在一个安全漏洞。这是NT4上的一个真正的vuln,例如,谢谢,很好的解释!因此,冒号的安全检查和风险是MS Windows特有的。关于关闭ASP.NET请求验证的建议,请注意:我已经一页一页地(对于应用程序中的许多页面)进行了验证,并手动执行了正确的检查和编码。但老实说:你的回答说服我最好不要在全球范围内关闭它,因为你描述的安全风险对我来说相当复杂,我以前从未听说过。内置的请求验证检查还有哪些危险?如果我关闭它,我必须了解所有这些风险并提供我自己的措施。如果您使用值
bla1.bla2.bla3.bla4.bla5:)
仅作为路由参数,而不是实际的文件名,则不存在漏洞。(清理用户输入以用作Windows上的文件名确实是一项困难的任务,涉及的问题远不止此。一般情况下,避免将用户提供的内容用于文件名。)任何事情都不要相信请求验证,它不会也无法保护您在一般情况下免受漏洞的影响,并且会阻止完全有效的输入。