iframe 中 SameSite=Lax cookie 和 GET 请求的规则是什么?
What are the rules for SameSite=Lax cookies and GET request inside iframe?
用户在 site-a.com 上并且有一个带有 site-b.com 的 iframe。 site-b.com 向 site-a.com 发出 GET 请求(在 iframe 内)。用于跨站点 GET 到 site-a.com 的 Lax cookie 是否会随请求一起发送?
更清楚:
- 在 GET 请求之前:site-b.com iframed in site-a.com
- GET 请求后:site-a.com iframed in site-a.com
根据我在 Chrome 91 canary 中的观察,此 cookie 被阻止,而在 Chrome 88 中未被阻止。我认为只有 Lax+POST 有问题,但看起来也Lax+GET 现在在某些情况下被阻止。有没有information/spec。关于跨站点 GET+Lax cookies?
首先,从 site-b.com 到 site-a.com 的请求是一个 cross-site 请求。不管它是 GET 还是 POST,它位于两个不同的可注册域 (a.k.a.eTLD+1s) 之间的事实意味着它是跨站点的。
specification 允许 Lax cookie 与 跨站点 请求一起发送,仅当它们是 顶级请求 并且有一个 安全方法(GET,但不是 POST):
* If the cookie's same-site-flag is not "None", and the HTTP
request is cross-site (as defined in Section 5.2) then exclude
the cookie unless all of the following statements hold:
1. The same-site-flag is "Lax" or "Default".
2. The HTTP request's method is "safe".
3. The HTTP request's target browsing context is a top-level
browsing context.
iframe 内的请求不是顶级 请求,因此无论请求是什么,Lax cookie 都不会与 iframe 上的跨站点请求一起发送方法是。
Chrome 曾经在此行为中有一个 bug,其中没有完全遵循顶级要求。 (过去,如果 iframe 及其所有祖先都匹配顶级,Chrome 会发送 Lax cookie。这是错误的,因为规范说它确实需要 be顶层。)你看到的是错误在 Chrome 90.
中修复后的正确行为
用户在 site-a.com 上并且有一个带有 site-b.com 的 iframe。 site-b.com 向 site-a.com 发出 GET 请求(在 iframe 内)。用于跨站点 GET 到 site-a.com 的 Lax cookie 是否会随请求一起发送?
更清楚:
- 在 GET 请求之前:site-b.com iframed in site-a.com
- GET 请求后:site-a.com iframed in site-a.com
根据我在 Chrome 91 canary 中的观察,此 cookie 被阻止,而在 Chrome 88 中未被阻止。我认为只有 Lax+POST 有问题,但看起来也Lax+GET 现在在某些情况下被阻止。有没有information/spec。关于跨站点 GET+Lax cookies?
首先,从 site-b.com 到 site-a.com 的请求是一个 cross-site 请求。不管它是 GET 还是 POST,它位于两个不同的可注册域 (a.k.a.eTLD+1s) 之间的事实意味着它是跨站点的。
specification 允许 Lax cookie 与 跨站点 请求一起发送,仅当它们是 顶级请求 并且有一个 安全方法(GET,但不是 POST):
* If the cookie's same-site-flag is not "None", and the HTTP
request is cross-site (as defined in Section 5.2) then exclude
the cookie unless all of the following statements hold:
1. The same-site-flag is "Lax" or "Default".
2. The HTTP request's method is "safe".
3. The HTTP request's target browsing context is a top-level
browsing context.
iframe 内的请求不是顶级 请求,因此无论请求是什么,Lax cookie 都不会与 iframe 上的跨站点请求一起发送方法是。
Chrome 曾经在此行为中有一个 bug,其中没有完全遵循顶级要求。 (过去,如果 iframe 及其所有祖先都匹配顶级,Chrome 会发送 Lax cookie。这是错误的,因为规范说它确实需要 be顶层。)你看到的是错误在 Chrome 90.
中修复后的正确行为