SameSite = “ Lax”和 SameSite = “ Strick”有什么区别?

有人能告诉我 SameSite = “ Lax”SameSite = “严格”之间的区别是什么吗? 举个好例子,因为我对这两者之间的区别有点困惑?

38044 次浏览

Lax 允许在某些跨站点请求上发送 Cookie,而 Strict 从不允许在跨站点请求上发送 Cookie。

可以跨站发送 Lax cookie 的情况必须满足以下两个条件:

  1. 请求必须是顶级导航。你可以认为这等同于 URL 栏中显示的 URL 发生变化,例如用户点击一个链接转到另一个站点。
  2. 请求方法必须是安全的(例如 GET 或 HEAD,但不是 POST)。

例如:

  1. 假设一个用户访问 site-a.com 并点击链接访问 site-b.com。这是一个跨站点的请求。这是一个顶级导航,是一个 GET 请求,因此 Lax cookie 被发送到 site-b.com。但是,不发送严格 Cookie,因为它毕竟是一个跨站点请求。
  2. 用户在 site-a.com 上,有一个加载 site-b.com 的 iframe。这是一个跨站点请求,但不是顶级导航(用户仍然在 site-a.com 上,也就是说,加载 iframe 时 URL 栏不会改变)。因此,Lax 和 Strictcookies 都不会发送到 site-b.com。
  3. 用户在 site-a.com 上,该用户将表单发送到 site-b.com。这是一个跨站点请求,但是该方法(POST)是不安全的。它不符合 Lax cookie 跨站点的标准,所以 Lax 和 Strictcookies 都没有发送到 site-b。Com

Strick 不允许在跨站点请求或 iframe 上发送 cookie。 Lax 只允许 GET。 None 允许所有请求,但是需要 安全

一幅画胜过千言万语。下面是 我的清晰图解,它总结了关于 SameSite 属性您需要了解的所有内容:

enter image description here

注意,“使用 SameSite = None 的 cookie 现在还必须指定安全属性(它们需要一个安全上下文/HTTPS)”来源: MDN

来源:@chlily 上面的回答和 关于 SameSite cookies 的博客

意外收获: 来自谷歌博客的同源网站和同源网站的区别