在我们 为所有Firefox用户 推出State Partitioning之前 ,我们打算对 Storage Access API进行 一些隐私和人性化的改进 。在这篇博文中,我们将详细介绍我们所做的一些新变化。
有了状态分割,第三方在嵌入不同网站时就不能访问同一个cookie罐。相反,他们为他们嵌入的每个网站获得一个新的cookie罐。这也不仅仅局限于cookie,所有的存储都以这种方式进行分区。
在一个理想的世界里,这将阻止追踪者在他们嵌入的任何地方对你进行监视,因为他们无法在所有这些网站上为你保持一个独特的标识符。不幸的是,这个世界并不那么简单,追踪者并不是唯一使用存储的第三方。如果你曾经使用过一个需要嵌入资源的认证供应商,你就知道第三方存储有多重要。
进入存储访问API。这个API让第三方请求存储访问,就像他们是第一方一样。这被称为 "非分区",它使浏览器和用户能够控制哪些第三方可以跨第一方来源维持状态,并确定他们可以从哪些来源访问该状态。这是第三方保持跨网站共享存储的首选方式。
存储访问API给浏览器留下了很大的空间,以决定何时允许第三方不受限制的存储访问。这个特点让浏览器可以自由地做出它认为对用户最好的决定,并决定何时直接向用户展示关于存储权限的选择。
另一方面,这意味着存储访问API可以因浏览器和版本的不同而不同。因此,除非我们做两件事,否则开发者的体验会受到影响。1)在设计时考虑到开发者的体验;2)沟通我们正在做的事情。
因此,让我们开始行动起来吧!以下是我们对存储访问API所做的四项改变,它们将改善用户隐私并保持强大的开发者体验...
要求用户对从未与之互动过的第三方表示同意
有了Storage API,浏览器就会决定是否让用户参与决定将存储访问权授予第三方。以前,火狐浏览器不涉及用户,直到第三方已经在五个不同的网站上访问了其存储。在这一点上,第三方的存储访问请求被提交给用户以做出决定。
我们允许第三方有一些回旋余地来解除他们在几个网站上的存储,因为我们担心弹出的权限请求会让用户不堪重负。我们觉得,只允许每个第三方授予几个权限,就可以降低权限频率,同时还可以防止任何一方在许多网站上跟踪用户。
我们还想在我们的存储访问API实现中改善用户的隐私,减少第三方自动解除分区的次数,而不会用存储访问请求压倒用户。我们所确定的改进是要求用户最近与第三方进行了互动,以给予他们存储访问权,而不明确询问用户是否允许。我们相信,取消对用户从未见过的网站的自动存储访问授权,既抓住了状态划分的精神,又不必再给用户带来太多的麻烦。
细心的读者现在可能会担心,任何只嵌入的页面,比如一些认证服务,都会因此受到严重影响。为了使天平更倾向于低用户接触,我们扩展了 "与网站互动 "的定义,以支持只嵌入的情况。现在,只要用户通过权限弹出窗口授予存储访问权或与具有存储访问权的iframe互动,这些都算作用户互动。这一变化是在保留合法用例、保护用户隐私和不以无休止的权限提示来烦扰用户之间进行了大量谨慎平衡的结果。我们认为我们找到了一个甜蜜的点。
改变第一方存储访问网站的范围
在推出状态分区的同时,我们看到存储访问API出现了相当多的用例。一个常见的用途是启用使用第三方的认证。
我们发现有时让第一方存储访问认证服务的登录门户是一个子域,如 **login.example.com**。这就造成了问题,当用户 在登录后 导航到 **https://example**.com...... 他们就不再登录了! 这是因为存储访问权限是被限制的。 这是因为存储访问权限只被授予登录子域,而不是网站的其他部分。认证提供者在 **login.example.com**,但在 example.com , 可以访问其cookies 。
我们通过将存储访问权限转移到网站范围内来解决这个问题。这意味着,当第三方在一个页面上获得存储权限时,它可以访问同一站点上所有页面的未分区存储。因此,在上面的例子中,认证的第三方可以访问用户在 **login.example.com**、 example.com 和 **any.different.subdomain.example.com**上的登录cookie !然而,他们仍然无法访问 example.com 或 different-example.com 上的登录cookie 。
清理用户互动要求
在请求存储访问时要求用户互动是存储访问API定义的一个粗略的边缘。让我们来讨论一下这个要求。
如果第三方在页面加载时立即调用requestStorageAccess,它就不应该获得该存储访问。它需要等待,直到用户与他们的iframe进行交互。滚动或点击是获得这种用户互动的好方法,它将在被授予后的几秒钟内过期。不幸的是,在这个要求中存在一些我们需要清理的角落情况。
其中一个角落是关于当用户在权限提示上点击接受或拒绝时如何处理用户的交互状态。我们决定,当用户在存储访问权限提示上点击拒绝时,第三方应该失去他们的用户互动。这可以防止第三方立即再次请求存储访问,打扰用户直到他们接受。
相反,我们决定,如果用户点击接受,就重置用户互动的计时器,以反映用户确实与第三方进行了互动。这将允许第三方在他们的iframe中使用需要存储访问和用户互动的API,只需要一次用户互动。
另一个案例是关于在要求用户互动的存储访问请求时应该有多严格。随着我们对存储访问API的迭代,小的变化已经被引入。其中一个变化是关于在一个页面上给予第三方存储访问权,但随后页面被重新加载的情况。第三方是否必须在再次请求存储访问之前获得用户互动?最初,答案是否定的,但现在是肯定的。我们更新了我们的实现,以反映这一变化并与其他浏览器保持一致。
整合用户的Cookie首选项
在Firefox 增强型跟踪保护的设置中 ,用户可以指定他们希望浏览器如何处理cookie。默认情况下,Firefox会阻止来自已知跟踪器的cookie。但我们还有其他一些可能的选择,如允许所有的cookies或阻止所有第三方cookies。用户可以根据自己的喜好改变这一偏好。
在实施存储访问API时,我们一直尊重用户的这种选择。然而,这对开发者来说并不清楚。例如,将火狐浏览器设置为阻止所有第三方cookie的用户会松一口气,因为他们知道存储访问API绝不会削弱他们的保护;即使是存储访问权限也不会让第三方对存储有任何访问。但这一点对第三方的开发者来说并不清楚。
requestStorageAccess返回的承诺将被解决,表明第三方可以访问其未分区的存储。我们努力去解决这个问题。在Firefox 98中,当用户通过偏好设置禁用第三方cookie时,函数requestStorageAccess将始终返回一个拒绝的承诺,hasStorageAccess将始终返回false。
The postImproving the Storage Access API in Firefoxappeared first onMozilla Hacks - the Web developer blog.