HTTP请求将发送到网站http://www.foobar.com/
,
服务器使用以下HTTP Location
标头进行响应
(领先斜线和backslah,然后是主机名)
Location:/\example.com
根据使用的浏览器,可以观察到两种行为:
在 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应用的行为不正确。
HTTP 1.1 specification (RFC 7231) 在第7.1.2节[强调添加]中定义了Location
标题:
“Location”标题字段在某些响应中用于引用a 与响应相关的特定资源。的类型 关系是由请求方法和 状态代码语义。
Location = URI-reference
字段值由单个URI引用组成。 什么时候有 形式的相对参考([RFC3986],第4.2节),最后的 通过将其与有效请求URI解析来计算值 ([RFC3986],第5节)。
URI specification (RFC 3986) 在第4.2节[强调添加]中定义了相对引用:
以两个斜杠字符开头的相对引用被称为 网络路径参考;这种参考很少使用。 :一种 以单个斜杠字符开头的相对引用是 称为绝对路径参考。这样做的相对参考 不以斜杠字符开头称为相对路径引用。
我可以找到的/\
前导序列的唯一引用位于以下帖子中:
http://www.asp.net/mvc/overview/security/preventing-open-redirection-attacks
//example.com
)之外,您是否知道任何其他“相对”URI实际上被某些浏览器解释为绝对的? (是否正确解释)更新
为Chrome输入的官方错误报告: