SameSite Cookie 说明

<ph type="x-smartling-placeholder">

浏览器支持

  • Chrome:51。 <ph type="x-smartling-placeholder">
  • Edge:16。 <ph type="x-smartling-placeholder">
  • Firefox:60。 <ph type="x-smartling-placeholder">
  • Safari:13. <ph type="x-smartling-placeholder">

来源

每个 Cookie 包含一个键值对以及一些属性 控制 Cookie 的使用时间和位置。

引入了 SameSite 属性(在 RFC6265bis) 可让您声明自己的 Cookie 是仅限第一方使用,还是仅限 同一网站的内容。了解确切的“网站”这里的含义。 网站是域名后缀和域名的一部分 。例如,www.web.dev 网域是 web.dev 网站的一部分。

关键词:如果用户在 www.web.dev 上向以下用户请求图片: static.web.dev,这是同一网站请求。

公共后缀列表定义了将哪些网页计为 位于同一网站上。它不仅依赖于 .com 等顶级域名, 但还可以包含 github.io 等服务。这样一来, 将 your-project.github.iomy-project.github.io 视为不同的网站。

关键词:如果用户在 your-project.github.io 上向以下用户请求图片: my-project.github.io,即为跨网站请求。

使用 SameSite 属性声明 Cookie 用法

Cookie 的 SameSite 属性提供三种不同的控制方法, 这种行为。您可以选择不指定该属性,也可以使用 StrictLax,用于将 Cookie 限制为同网站请求。

如果您将 SameSite 设置为 Strict,则 Cookie 只能在 第一方环境也就是说,如果 Cookie 网站与所显示的网站 。因此,如果 promo_shown Cookie 的设置如下:

Set-Cookie: promo_shown=1; SameSite=Strict

当用户访问您的网站时,Cookie 会按预期随请求一起发送。 不过,如果用户点击链接进入您的网站, 而不会发送初始请求。 这对与始终位于初始配置的功能相关的 Cookie 非常有用 例如更改密码或购物 对 promo_shown 等 Cookie 设置限制。如果您的读者打开此链接 网站,那么他们希望发送 Cookie 以便应用其偏好设置。

SameSite=Lax 允许浏览器发送这些顶级 导航。例如,如果其他网站引用了您的网站内容, 在这种情况下,您可以使用自己的猫咪照片并提供文章链接作为 如下:

<p>Look at this amazing cat!</p>
<img src="https://blog.example/blog/img/amazing-cat.png" />
<p>Read the <a href="https://blog.example/blog/cat.html">article</a>.</p>

将 Cookie 设置为 Lax 后,如下所示:

Set-Cookie: promo_shown=1; SameSite=Lax

当浏览器为其他人的博客请求 amazing-cat.png 时,您的 网站不发送 Cookie不过,当读者 链接到 cat.html 的网站,则该请求包含 Cookie。

我们建议以这种方式使用 SameSite,并设置会影响网站的 Cookie 向 Lax 显示相关数据,并向 Strict 显示与用户操作相关的 Cookie。

您还可以将 SameSite 设置为 None,以指明您希望 Cookie 在所有上下文中发送。如果您提供了可供其他网站使用的服务(例如 小部件、嵌入内容、联属计划、广告或登录, 多个网站,请使用 None 确保您的意图清晰明确。

<ph type="x-smartling-placeholder">
</ph> 根据上下文标记为“无”、“宽松”或“严格”的三个 Cookie <ph type="x-smartling-placeholder">
</ph> 将 Cookie 的上下文明确标记为 NoneLaxStrict

不使用 SameSite 的默认行为变更

浏览器支持

  • Chrome:80。 <ph type="x-smartling-placeholder">
  • Edge:86。 <ph type="x-smartling-placeholder">
  • Firefox:背后有旗帜。
  • Safari:不支持。 <ph type="x-smartling-placeholder">

SameSite 属性得到了广泛支持,但未被广泛采用。 过去,在不使用 SameSite 的情况下设置 Cookie 时,默认会将 Cookie 发送到 所有上下文,这使得用户容易受到 CSRF 的影响并在无意间造成 信息泄露。鼓励开发者表明自己的意图 并为用户提供更安全的体验、IETF 提案, 提升 Cookie 效果 列出了两项主要变更:

  • 没有 SameSite 属性的 Cookie 被视为 SameSite=Lax
  • SameSite=None 的 Cookie 还必须指定 Secure,这意味着它们需要 安全上下文。

这两项更改均向后兼容 实现了旧版 SameSite 属性,以及 不支持早期 SameSite 版本的浏览器。它们旨在 减少开发者的完全依赖浏览器的默认行为是 行为和预期用途。任何无法识别您 SameSite=None 应忽略它。

默认SameSite=Lax

如果您在发送 Cookie 时未指定其 SameSite 属性,则浏览器 将该 Cookie 视为设置为 SameSite=Lax。我们仍然建议您 明确设置 SameSite=Lax,以提供更一致的用户体验 。

SameSite=None必须是安全的

使用 SameSite=None 创建跨网站 Cookie 时,您还必须设置这些 Cookie 到 Secure,以便浏览器接受:

Set-Cookie: widget_session=abc123; SameSite=None; Secure

从 Chrome 76 开始,您可以启用 about://flags/#cookies-without-same-site-must-be-secure,以及 Firefox 69 通过在network.cookie.sameSite.noneRequiresSecure about:config

此外,我们还建议您尽快将现有 Cookie 更新为 Secure。 如果您依赖在您的网站上提供第三方内容的服务,请确保 您的服务提供商会更新其 Cookie,以及更新所有代码段或 依赖项,以确保网站使用新行为。

有关如何更新 Cookie 以成功处理这些 SameSite=None 的变化和浏览器行为的差异,请参阅 后续文章:SameSite Cookie 诀窍

感谢 Lily Chen、Malte Ubl 和 Mike 的贡献和反馈 West、Rob Dodson、Tom Steiner 和 Vivek Sekhar。

Cookie 主打图片提供方 皮利-里恩·普里斯克 (Pille-Riin Priske) 已开启 不启动