27

Chrome 新的默认 Referrer-Policy : strict-origin-when-cross-origin

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=Mzg2NDAzMjE5NQ%3D%3D&%3Bmid=2247487123&%3Bidx=1&%3Bsn=3365c74791ed7dc7f3c0958cadd092d1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

如果你的站点有使用 Referer 标头收集网页的访问来源信息,则此策略变化可能对你的程序造成影响,请仔细阅读。

在开始阅读本文之前,如果你不理解  site  和  origin  之间的关系,请阅读: 同站和同源你理解清楚了么?

Referer 标头

Referer 请求头包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。

服务端一般使用 Referer 请求头识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等。

IvYzQrq.png!mobile

这里有意思的一点:referer 实际上是 "referrer" 误拼写。Referrer-Policy 标头以及 JavaScript 中的 referrer 拼写是没有问题的。

Referer-Policy

Referer 请求头可能暴露用户的浏览历史,涉及到用户的隐私问题。所以 HTTP 提供了  Referrer-Policy 标头,其用来监管和限制哪些访问来源信息会在  Referer 中发送(应该被包含在生成的请求当中)。

VB7JN3Y.png!mobile

Referer-Policy 包括以下几个可选项

  • no-referrer

整个 Referer 首部会被移除。访问来源信息不随着请求一起发送。

  • no-referrer-when-downgrade (默认值)

在同等安全级别的情况下,引用页面的地址会被发送( HTTPS->HTTPS ),但是在降级的情况下不会被发送 ( HTTPS->HTTP )。

  • origin

在任何情况下,仅发送文件的源作为引用地址。例如 https://example.com/page.html 会将  https://example.com/ 作为引用地址。

  • origin-when-cross-origin

对于同源的请求,会发送完整的URL作为引用地址,但是对于非同源请求仅发送文件的源。

  • same-origin

对于同源的请求会发送引用地址,但是对于非同源请求则不发送引用地址信息。

  • strict-origin

在同等安全级别的情况下,发送文件的源作为引用地址( HTTPS->HTTPS ),但是在降级的情况下不会发送 ( HTTPS->HTTP )。

  • strict-origin-when-cross-origin

对于同源的请求,会发送完整的URL作为引用地址;在同等安全级别的情况下,发送文件的源作为引用地址( HTTPS->HTTPS );在降级的情况下不发送此首部 ( HTTPS->HTTP )。

  • unsafe-url

无论是同源请求还是非同源请求,都发送完整的 URL(移除参数信息之后)作为引用地址。

Referer-Policy 默认值

如果 Referer-Policy 未设置任何策略,则使用浏览器的默认值。网站通常会遵循浏览器的默认设置。

对于导航和 iframeReferer 头中的数据也可以通过  JavaScript 使用  document.referrer 访问。

no-referrer-when-downgrade 是跨浏览器的一种广泛的默认策略。但是现在,许多浏览器正处于向更多提高隐私的默认设置过渡的阶段。

Chrome 计划在85版开始 将其切换默认策略  no-referrer-when-downgrade 更换到  strict-origin-when-cross-origin

变化

strict-origin-when-cross-origin 提供更多的隐私。有了这个政策, Referer 标头只会发送  origin

这样可以防止泄漏私人数据,这些数据可以从完整URL的其他部分(例如路径和查询字符串)访问。

63eURjQ.png!mobile

例如,在一个跨域请求中:

https://site-one.example/stuff/detail?tag=red 访问  https://site-two.example/…

  • 使用  no-referrer-when-downgrade : Referer:  https://site-one.example/stuff/detail?tag=red
  • 使用  strict-origin-when-cross-origin : Referer:  https://site-one.example/

不变的

  • no-referrer-when-downgrade
    strict-origin-when-cross-origin
    HTTPS
    HTTP
    Referer
    
  • 在相同的来源内, Referer 标头值为完整的  URL

YZzamaU.jpg!mobile

点赞、在看、分享支持作者:heart:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK