关于使用 Chrome 更改 SameSite 的困惑

Gob*_*ord 6 google-chrome cross-site same-origin-policy cors samesite

我需要一些帮助来理解我在描述 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 
Run Code Online (Sandbox Code Playgroud)

我不希望 CORS 标头会影响任何事情(基于我所看到的所有内容,它从未提及 SameSite 更改),但无论如何我还是将它们放在这里。鉴于这种情况,当我将标志设置为:

chrome://flags/#same-site-by-default-cookies
chrome://flags/#cookies-without-same-site-must-be-secure 
Run Code Online (Sandbox Code Playgroud)

我希望浏览器阻止发送 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 
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 6

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

如果用户在 www.web.dev 上并从 static.web.dev 请求图像,那么这是同站点请求。

与您的第一个案例相同:

Site: https://a.a.com
API: https://b.a.com
Run Code Online (Sandbox Code Playgroud)

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

  • 事实上,我做到了。这让我非常困惑。它指出:“公共后缀列表定义了这一点,因此它不仅包括 .com 等顶级域名,还包括 github.io 等服务。这使得 your-project.github.io 和 my-project.github.io 能够计数作为单独的站点。” 我不明白为什么“aacom”和“bacom”是相同的,但他们给出的例子 my-project.github.io -&gt; your-project.github.io 这是一个跨站点请求。格式上的差异基本上是相同的。 (2认同)