如何处理从 Chrome 80 开始的新第三方 cookie 规则?

How to handle new third party cookie rules starting in Chrome 80?

从 Chrome 80 开始,第三方 cookie 将被阻止,除非它们具有 SameSite=NoneSecure 作为属性。使用 None 作为该属性的新值。 https://blog.chromium.org/2019/10/developers-get-ready-for-new.html

上述博客 post 指出 Firefox 和 Edge 计划在未确定的日期实施这些更改。此处列出了不兼容的浏览器列表 https://www.chromium.org/updates/same-site/incompatible-clients

处理这种情况以实现跨浏览器兼容性的最佳做法是什么?

最初的想法是使用本地存储而不是 cookie,但担心将来本地存储可能会发生类似的变化。

您说对了,随着浏览器转向更强大的保护用户隐私的方法,这改变了网站需要考虑处理数据的方式。网络的可组合/可嵌入特性与混合内容的隐私/安全问题之间肯定存在紧张关系。我认为,在锁定指纹向量以防止用户跟踪之间的冲突中,这目前已成为人们关注的焦点,而用户跟踪通常与网站用来检测欺诈的信号相同。一个古老的问题是,如果您出于 "good" 的原因拥有完美的隐私,这意味着所有人都在做 "bad" 的事情(比如循环浏览一批被盗的信用卡)也拥有完美的隐私。

无论如何,除了所有这一切的道德困境之外,我建议寻找方法来鼓励用户在需要跟踪与他们。编写代码似乎是一个普遍安全的假设,好像所有存储都将在长 运行 中进行分区,并且任何形式的跟踪都应经过知情同意。如果这不是事情发展的方向,那么我仍然认为你会创造更好的体验。

短期内,https://web.dev/samesite-cookie-recipes有一些选择:

  1. 使用两组 cookie,一组采用当前格式 headers,另一组不捕捉所有浏览器。
  2. 嗅探用户代理 return 适合 headers 浏览器。

您还可以维护一个 first-party cookie,例如SameSite=LaxSameSite=Strict,当用户在 top-level 上下文中访问您的网站时,您用来刷新 cross-site cookie。例如,如果您提供一个提供个性化内容的可嵌入小部件,如果没有 cookie,您可以在小部件中显示一条消息,将用户链接到原始站点以进行登录。这样您就可以明确传达价值致您的用户允许他们在该网站边界被识别。

对于 longer-term 视图,您可以查看像 HTTP State Tokens which outlines a single, client-controlled token with an explicit cross-site opt-in. There's also the isLoggedIn proposal 这样的提案,它涉及向浏览器指示特定令牌用于跟踪用户的方法 session.