SameSite cookies

翻译不完整。 请帮助我们翻译这篇文章!

SameSite属性作为cookie的属性之一,允许您声明是否应将Cookie限制为第一方或同一站点上下文。

Values

 SameSite 包含下面这些默认值

Lax

Cookies允许与顶级一起发送,并将与第三方网站发起的GET请求一起发送。这是浏览器中的默认值。

Strict

Cookie只会在第一方上下文中发送,不会与第三方网站发起的请求一起发送。

None

Cookie将在所有上下文中发送,即允许跨域发送。

以前None是默认值,但最近的浏览器版本将Lax作为默认值,以便对某些类型的跨站点请求伪造(csrf)攻击具有相当强的防御能力。

None需在最新的浏览器版本中使用Secure属性。更多信息见下文。

 修复常见警告

设置SameSite=None ,同时也需要设置 Secure属性

如果没有设置Secure属性,控制台中可能会出现以下警告:

Some cookies are misusing the “sameSite“ attribute, so it won’t work as expected.
Cookie “myCookie” rejected because it has the “sameSite=none” attribute but is missing the “secure” attribute.

出现此警告是因为请求SameSite=None但未标记为Secure的任何cookie都将被拒绝。

Set-Cookie: flavor=choco; SameSite=None

要解决此问题,必须将Secure属性添加到SameSite=None cookies中。

Set-Cookie: flavor=choco; SameSite=None; Secure

安全cookie仅通过HTTPS协议通过加密请求发送到服务器。请注意,不安全站点(http:)无法使用Secure指令设置cookies。

没有SameSite属性的Cookies默认为SameSite=Lax

最新版本的现代浏览器为cookies的SameSite提供了更安全的默认值,因此控制台中可能会显示以下消息:

Some cookies are misusing the “sameSite“ attribute, so it won’t work as expected.
Cookie “myCookie” has “sameSite” policy set to “lax” because it is missing a “sameSite” attribute, and “sameSite=lax” is the default value for this attribute.

出现警告是因为未显式指定cookie的SameSite属性:

Set-Cookie: flavor=choco

虽然您可以依赖现代浏览器自动应用SameSite=Lax,但您应该显式地指定它,以便清楚地传达您的意图,即将SameSite属性应用于您的cookie。这也将改善跨浏览器的体验,因为并不是所有浏览器都默认为Lax。

Set-Cookie: flavor=choco; SameSite=Lax

Specifications

Specification Title
RFC 6265, section 4.1: Set-Cookie HTTP State Management Mechanism
draft-ietf-httpbis-rfc6265bis-05 Cookie Prefixes, Same-Site Cookies, and Strict Secure Cookies

浏览器兼容性

Compat("http.headers.Set-Cookie", 5)

另见

  • HTTP cookies
  • HTTPHeader("Cookie")
  • domxref("Document.cookie")