SameSite cookie、框架、子域和重定向

Gyu*_*Fox 8 cookies google-chrome samesite

SameSiteCookies的概念绝对是一个难以掌握的...

为了准备Chrome 80的更改,我正在尝试衡量缺少SameSite属性对我的 cookie 的影响。我有以下配置:

  1. 用户最初访问main.mysite.com
  2. main.mysite.com设置SomeCookie ( Set-Cookie: SomeCookie=value; path=/; secure; httponly) 并重定向到auth.mysite.com
  3. 用户在auth.mysite.com 上进行身份验证并重定向回main.mysite.com(POST 请求)

因为main.mysite.comauth.mysite.com之间的重定向被认为是同一个站点,并且因为Chrome 80将缺少SameSite属性视为SameSite=Lax,所以这很好用。

但是,当main.mysite.com嵌入在另一个站点(例如othersite.com)上托管的页面上的框架中时,SomeCookie不会在第 3 步发送回main.mysite.com

显示问题发生的插图

这是正常的吗?为什么?

chl*_*ily 18

上面的答案是不正确的......让我澄清一些困惑。

1. 就 SameSite 而言,2 个站点何时是“同一站点”?

无论 cookie 的域属性如何,当两个站点的 eTLD+1(也称为可注册域)相同时,它们都被视为相同。有关更详细的解释,请参阅我的答案here

因此,在这种情况下,假设 eTLD 是“.com”,我们会认为 auth.mysite.com 和 main.mysite.com 是同一个站点,因为 eTLD+1 是两者的 mysite.com。另一方面,anything.mysite.com 和 othersite.com 始终是跨站点的。无论是顶级导航还是子资源请求(如 iframe 中的图像或文档),都是如此。

2. Domain属性是什么意思?

如果 cookie 设置为Set-Cookie: cookiename=cookievalue; Domain=mysite.com,则 cookie 将根据请求发送到任何匹配 *.mysite.com 的域(即所有子域)。

这是一种调整 cookie 范围的方法。例如,您可以将Domain=mysite.com一个全局 cookie 用于您的所有域都关心的全局 cookie,以及Domain=corp.mysite.com一个您公司的所有内部域都关心的 cookie(但不是您的外部域,例如)。

默认(对于未明确设置域属性的 cookie)是仅将 cookie 发送到设置 cookie 的域。(没有子域。)

您不能设置与请求的 URL 不匹配的域属性。

(此外,没有 cookie 的“来源”属性这样的东西。)

3. 那么域与SameSite 有什么关系呢?

没有。它们是独立的 cookie 属性。Domain 不关心同站点/跨站点上下文,SameSite 不关心 cookie 的域/子域范围。

4. 当 mysite.com 嵌入到 othersite.com 的 iframe 中时,为什么不发送 default-Lax cookie?

这被视为跨站点上下文,因为用户 URL 栏中的站点是 othersite.com,而请求是向 mysite.com 发出的,并且它们具有两个不同的 eTLD+1。

因为它在 iframe 中,这不是顶级导航,所以所有跨站点请求都将排除 SameSite cookie。

如果它顶级导航(用户单击将他们从 othersite.com 带到 mysite.com 的链接),那么请求方法将很重要。在绝大多数情况下,这将是一个 GET 请求,因此发送Lax 模式下的 cookie 。

希望这可以帮助!您可以参考最新版本的规范以获取更多详细信息。

  • 好的。如果我的理解正确,请告诉我: 1. 用户访问 othersite.com,其中嵌入了 main.mysite.com 的 iframe。2. 在向 main.mysite.com 发出请求时,服务器发送包含 SomeCookie 的 Set-Cookie,然后重定向到 auth.mysite.com。3.(仍在 iframe 内)auth.mysite.com POST 返回 main.mysite.com,并且此 POST 请求中缺少 SomeCookie。-- 在这种情况下,步骤 1 中对 main.mysite.com 的请求是跨站点的,并且由于它不是顶级请求,因此步骤 2 中的浏览器不会接受 SameSite cookie。因此在步骤 3 中,甚至没有要发送的 cookie。 (2认同)
  • @GermanQuinteros 这一定是别的东西。如果 SameSite='None' 则应提供 cookie。确保该属性实际应用在 cookie 中,有时需要更新您的框架才能设置该属性(例如,我们使用的是 .Net Core 2.2,并且必须更新到最新的 2.2.8) (2认同)