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

时间:2020-01-30 16:55:30

标签: samesite

有人可以告诉我 SameSite =“ Lax” SameSite =“ Strict” 有什么区别,因为我对这两者有些困惑?

3 个答案:

答案 0 :(得分:35)

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

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

  1. 该请求必须是顶级导航。您可以认为这等同于网址栏中显示的网址发生更改,例如用户单击链接以转到另一个站点。
  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时,网址栏不会更改)。因此,松懈或严格的cookie都不会发送到site-b.com。
  3. 用户位于site-a.com上,该站点将表单过帐到site-b.com。这是一个跨站点请求,但是方法(POST)不安全。它不符合Lax Cookie跨站点访问的条件,因此Lax和Strict Cookie均不会发送到site-b.com

答案 1 :(得分:3)

严格不允许在跨站点请求或iframe中发送Cookie。 LAX 仅允许GET 不允许所有请求。但是安全是必需的;

答案 2 :(得分:2)

一张图片值一千字。这是我的清晰图,总结了您需要了解的有关SameSite属性的所有信息:

enter image description here

来源:来自上述@chlily的答案和blog from Google about SameSite cookies

奖金:difference between same-site and same-origin from Google's blog