Google改变了Chrome浏览器的一个核心组件的工作方式,以便为用户增加额外的隐私保护。这个Chrome浏览器组件被称为HTTP缓存或共享缓存,它的工作原理是保存网页上加载的资源副本,如图片、CSS文件和JavaScript文件。
其想法是,当用户再次访问同一网站或访问使用相同文件的其他网站时,Chrome将从其内部缓存中加载这些文件,而不是浪费时间重新下载每个文件。
这个组件不仅存在于Chrome浏览器内部,而且从互联网早期开始就存在于所有的网络浏览器内部,作为一种节省带宽的功能。在所有的浏览器中,缓存系统通常以同样的方式工作。每个保存在缓存中的图片、CSS或JS文件都会收到一个存储密钥,这个密钥通常是资源的URL。
例如,图像的存储密钥就是图像URL本身:https://x.example/doge.png,当浏览器加载一个新的页面时,它会在其内部的缓存数据库中搜索该键(URL),并查看是否需要下载图片或从缓存中加载。
不幸的是,这些年来,网络广告和分析公司意识到,这个功能也可以被滥用来追踪用户。检测用户是否访问过某个特定网站。商业上的竞争者可以通过检查缓存中是否有可能是特定网站或特定网站群的资源,来检测用户的浏览历史,缓存还可以用来存储类似cookie的标识符,作为跨站跟踪机制。
但随着本周早些时候发布的Chrome 86,谷歌推出了对这一机制的重要改变。
这个功能被称为 "缓存分区",它的工作原理是根据两个额外的因素来改变HTTP缓存中资源的保存方式。从现在开始,一个资源的存储键将包含三个项目,而不是一个。
顶级网站域名(http://a.example)
该资源的当前框架(http://c.example)
该资源的网址(https://x.example/doge.png)
通过在缓存预加载检查过程中增加额外的密钥,Chrome有效地阻止了过去所有针对其缓存机制的攻击,因为大多数网站组件将只能访问自己的资源,而无法检查自己没有创建的资源。
不过,在一些场景下,缓存可能会出现交集,但攻击面远比以前小。
谷歌从2019年9月发布的Chrome 77开始就一直在测试缓存分区,并表示新系统不会对用户或开发者产生任何影响。唯一会看到变化的是网站所有者,他们最有可能观察到网络流量增加约4%。
缓存分区目前只在Chrome浏览器中活动,但基于Chromium开源代码的其他浏览器也可以使用,所有这些浏览器最有可能在接下来的几个月内也部署它。其中包括Edge、Brave、Opera、Vivaldi等。
Mozilla也宣布了类似的计划,将实现Chrome的缓存分区机制,但目前还没有截止日期,何时能登陆Firefox。
另一家主要的浏览器厂商苹果,从2019年初开始就一直在使用有限的缓存分区系统。然而,Safari的缓存分区系统只使用了两项检查(#1和#3),而不是Chrome更彻底的三项检查。