代码之家  ›  专栏  ›  技术社区  ›  Slauma

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

  •  18
  • Slauma  · 技术社区  · 14 年前

    有人(可能是机器人)向我的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:) )不会导致此异常。

    3 回复  |  直到 14 年前
        1
  •  21
  •   bobince    14 年前

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

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

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

    还有其他一些字符,即使您关闭了请求验证,也不能出于路由目的而放入路径部分。特别是斜杠( %2F %5C

        2
  •  1
  •   Akash Kava    14 年前

    我记不清了,但是IE浏览器和操作系统有关,它可以执行一些不好的操作,比如con:sss“能够打开控制台并执行一些批处理命令等,在冒号之前的任何操作都被视为协议,windows允许您重写/创建新的协议,这些协议可以由您的dll打开和使用。任何对com和url名字有更丰富经验的人都可以给你非常正确的答案。

        3
  •  0
  •   Ioannis Karadimas    14 年前

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

        4
  •  0
  •   brian d foy    4 年前

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

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