【问题标题】:Confusion regarding SameSite changes with Chrome对 SameSite 更改与 Chrome 的混淆
【发布时间】:2020-07-01 05:36:55
【问题描述】:

我需要一些帮助来理解我发现的描述 Chrome 的新 SameSite 限制的材料中没有描述的案例。目前,我有一个托管站点的案例,该站点向 API 发出跨站点请求。 API 使用 CORS 标头进行响应。详情如下:

Site: https://a.a.com
API: https://b.a.com

--API response headers

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://a.a.com

--cookie previously set with

Set-Cookie: value=somevalue; Path=/; Expires=<some time/date>; HttpOnly 

我不希望 CORS 标头会影响任何东西(基于我所看到的一切,它从未提及 SameSite 更改)但我还是将它们放在这里。鉴于这种情况,当我在以下位置设置标志时:

chrome://flags/#same-site-by-default-cookies
chrome://flags/#cookies-without-same-site-must-be-secure 

我希望浏览器阻止 cookie 值的发送。这是因为我希望 cookie 被视为具有 SameSite=Lax 并且这些是跨站点请求。这不是实际发生的情况,cookie 已成功发送。在测试这个时,我还尝试在任何请求和 POST 请求之间等待 3 分钟,以避免“Lax+POST”缓解,因为我们在每个响应上设置了 cookie(具有更新的过期时间)。根据我正在阅读的有关更改的内容,我不明白为什么浏览器没有阻止发送此 cookie 以及为什么这些请求会成功。

为了让事情变得更加混乱,我们在开发过程中遇到了一些案例,具有以下场景:

Site: http://localhost
API: https://a.b.com

--API response headers

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost

--cookie previously set with

Set-Cookie: value=somevalue; Path=/; Expires=<some time/date>; HttpOnly 

与描述的第一个场景不同,这些请求实际上阻止了 cookie 按预期发送(仅当启用新的 chrome 标志时)。正如我所料,浏览器给出的警告信息与 SameSite 和 Secure 标志有关。

有人能帮我理解为什么第一个场景有效而第二个无效吗?我担心它工作实际上是一个错误,它不应该。如果是这种情况,将来它可能会在没有警告的情况下从“工作”变为“失败”。

我发现的 Chrome 更改/标志的详细信息在这里:

【问题讨论】:

标签: google-chrome cors same-origin-policy cross-site samesite


【解决方案1】:

这里提到https://web.dev/samesite-cookies-explained/

如果用户在 www.web.dev 并从 static.web.dev 那么这是一个同站点请求。

和你的第一个案例一样:

Site: https://a.a.com
API: https://b.a.com

所以浏览器认为你的第一个请求是同站请求,cookies不会被删除,但第二个是跨站请求,没有samesite属性的cookies会被删除。

【讨论】:

  • @Goblinlord 是说这是一个跨站点,因为 github.io 是一项服务,并且该站点是后缀 github.io + 之前的域部分。阅读前一段。
  • 实际上,我做到了。这让我非常困惑。它指出:“公共后缀列表定义了这一点,因此它不仅包括像 .com 这样的顶级域,还包括像 github.io 这样的服务。这使得 your-project.github.io 和 my-project.github.io 能够计数作为单独的站点。”我不明白为什么“a.a.com”和“b.a.com”是相同的,但他们给 my-project.github.io -> your-project.github.io 的示例是跨站点请求。格式上基本是一样的区别。
  • 另外,它说“com”和“io”都在这个公共后缀列表中,所以我不明白这两个例子之间的区别(它们对我来说似乎相同,但他们说的是一个是相同的,一个是交叉的)。
  • hmmm... github.io 确实在这个列表中。那么如果它在列表中,它会是“交叉”吗?在“mine.github.io”中,“github.io”就在这个公共列表中。在“static.web.dev”中,只有“dev”在这个列表中。所以列表“排除”了“相同”的东西???
  • 其实,我想我明白了。站点,会指“a.com”,站点是公共后缀加上下一部分吗?在“mine.github.io”中,整个就是“site”,因为“github.io”在公共后缀列表中。
猜你喜欢
  • 1970-01-01
  • 2020-12-08
  • 2012-03-04
  • 2015-06-26
  • 1970-01-01
  • 2014-07-09
  • 2012-09-14
  • 2012-05-21
  • 2021-09-29
相关资源
最近更新 更多