" Referer的"当用户点击覆盖Chrome中新标签的iframe内部的链接时,标头丢失

时间:2015-05-27 19:02:57

标签: iframe google-chrome-extension http-headers http-referer

问题

浏览器的预期行为是否像这样?

相关的Chromium bug

https://code.google.com/p/chromium/issues/detail?id=492761

的步骤

  1. 为Chrome创建empty extension

  2. 将新标签覆盖放入manifest.json"chrome_url_overrides": {"newtab": "newtab.html"}

  3. 创建newtab.htmlchrome-extension://<extension_id>/newtab.html),创建一个iframe并将一些页面加载到其中,例如https://<some_page>.com/

  4. 添加指向该页面的链接,例如https://example.org/

  5. 点击该链接并观察请求
  6. 预期结果

    &#34; Referer&#34;标题应该存在,例如:

    GET / HTTP/1.1
    Host: example.org
    Connection: keep-alive
    Pragma: no-cache
    Cache-Control: no-cache
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.65 Safari/537.36
    Referer: https://<some_page>.com/
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: en-US,en;q=0.8,de;q=0.6,ru;q=0.4
    Cookie: ...
    

    实际结果

    没有&#34; Referer&#34;头:

    GET / HTTP/1.1
    Host: example.org
    Connection: keep-alive
    Pragma: no-cache
    Cache-Control: no-cache
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.65 Safari/537.36
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: en-US,en;q=0.8,de;q=0.6,ru;q=0.4
    Cookie: ...
    

1 个答案:

答案 0 :(得分:3)

&#34; eroman at chromium.org&#34;钉死它(见已关闭的铬虫报告)。

问题是,当iframe包含安全(https)页面,但iframe本身包含在非安全页面(在这种情况下替换为Chrome newtab)时,则会发出非安全(http)请求用户点击该iframe中的链接。

RFC 2616 section 15.1.3步骤说:

Clients SHOULD NOT include a Referer header field in a (non-secure)
HTTP request if the referring page was transferred with a secure
protocol.

这使得描述的情况成为理想情况,因此浏览器的行为符合标准的预期。

此外,如果链接指向非安全页面,例如http://example.org/,这将是一个正常的(非安全的)http请求,因此&#34; Referer&#34;将被省略 - 只是因为引用页面是安全的。当然,即使没有包含安全页面的iframe,这仍然有效。