Google chrome HTTP重定向到带前导斜杠的URI+;“黑斜杠”/\example.com“;在Chrome/IE上被认为是绝对的

Google chrome HTTP重定向到带前导斜杠的URI+;“黑斜杠”/\example.com“;在Chrome/IE上被认为是绝对的,google-chrome,internet-explorer,http,redirect,Google Chrome,Internet Explorer,Http,Redirect,HTTP请求被发送到网站http://www.foobar.com/, 服务器用以下HTTPLocation头响应 (前导斜杠和反斜杠,后跟主机名) 根据所使用的浏览器,可以观察到两种行为: 在Google Chrome 43(windows和linux)、Internet Explorer 11上,浏览器然后请求以下URI(就好像位置头值是协议相对URI): http://example.com 在Firefox 38、Safari 8、Epiphany或Curl上,执行以下请求: http

HTTP请求被发送到网站
http://www.foobar.com/
, 服务器用以下HTTP
Location
头响应 (前导斜杠和反斜杠,后跟主机名)

根据所使用的浏览器,可以观察到两种行为:

  • 在Google Chrome 43(windows和linux)、Internet Explorer 11上,浏览器然后请求以下URI(就好像位置头值是协议相对URI):

    http://example.com

  • 在Firefox 38、Safari 8、Epiphany或Curl上,执行以下请求:

    http://www.foobar.com/\example.com

据我所知,Chrome和IE应用的行为是不正确的

定义了第7.1.2节[增加强调]中的
位置
标题:

“位置”标题字段在某些响应中用于引用 与响应相关的特定资源。类型 关系由请求方法和 状态代码语义

Location = URI-reference
字段值由单个URI引用组成当它具有 相对参考的形式([RFC3986],第4.2节),最终 值是通过根据有效请求URI解析来计算的 ([RFC3986],第5节)。

定义了第4.2节[增加强调]中的相对参考:

以两个斜杠字符开头的相对引用称为 网络路径参考;这样的引用很少使用A 以单个斜杠字符开头的相对引用是 称为绝对路径参考。一个相对的引用 不以斜杠字符开头称为相对路径引用

我能找到的关于这个
/\
前导序列的唯一参考是以下文章:

  • 你对为什么Chrome和IE将这些URI解释为绝对URI有什么解释吗? 它有什么作用吗
  • 除了协议相对URI(
    //example.com
    ),您还知道其他一些浏览器实际上解释为绝对的“相对”URI吗?(是否正确解释)
  • 已更新

    • 为Chrome输入的官方错误报告:


    这是一个官方的Chromium Bug:


    请求中反斜杠的用途是什么?您肯定不是说请求的文件(或目录)的名称中有反斜杠?如果是这样的话,应该有人被解雇。无论如何,在我看来,是的,这是一条绝对的路径,但绝对的意思是在当前域的根,而不是互联网的根,所以
    http://www.foobar.com/\应选择example.com
    。现在我知道IE总是用斜杠替换反斜杠(因为它认为这有助于错误地键入反斜杠的Windows用户),但我很惊讶Chrome也这么做。在IE的辩护中,名字中不应该有反斜杠,所以从技术上讲,它对它们做什么都不重要@Lister先生“请求中反斜杠的用途是什么?”这正是我的问题,我看不出URI以“/\”开头有任何用途。然而,IE和chrome的处理可能会扩大网站上的攻击面,该网站接受相对重定向URL作为参数,但没有考虑此类验证,这就是为什么我想知道是否有新的IE/chrome行为背后的真实用例或原因。ASP.net博客文章中明确检查了这一顺序,所以我想这是一种已知的行为,至少对一些人来说……我明白了。那么,问题就变成了,“你怎样才能防止IE把反斜杠当作斜杠来对待?”我不知道你能不能做到。或者,“当有人在我网站的URL中使用
    \/
    时,我如何检测到它?”但你说这是你的服务器所做的,而不是外部攻击者?
    Location = URI-reference