Samesite=当用户从不同域单击 link 时,302 重定向中不包含严格 cookie
Samesite=Strict cookies are not included in 302 redirects when user clicks link from a different domain
- 一位客户将 link 到他们网站上的我们的网页之一:customer.site/links.html
- 一个人点击那个 link 并被发送到我们的。site/webapp/handlerequest.aspx?someparam=somevalue
someparam
的值在 SameSite=Strict
的 cookie 中设置,然后使用 302 重定向到 同一域中的另一个页面:
Request URL: https://our.site/webapp/handlerequest.aspx?someparam=somevalue
Request Method: GET
Status Code: 302
Remote Address: ...
Referrer Policy: strict-origin-when-cross-origin
cache-control: private
content-length: ...
content-type: text/html; charset=utf-8
date: ...
location: /webapp/someotheraction
server: Microsoft-IIS/10.0
set-cookie: someparam=somevalue; expires=Thu, 17-Mar-2022 14:41:13 GMT; path=/; secure; HttpOnly; SameSite=Strict
strict-transport-security: max-age=31536000
x-frame-options: SAMEORIGIN
浏览器 不 在 302 重定向到 /webapp/someotheraction 时包含此 cookie。
只有当我们专门更改代码以将此 cookie 设置为 SameSite=Strict
时,这种情况才会开始发生。
这发生在 Chrome、Firefox、Edge 和 IE(旧版 IE)
这是故意的吗?为什么?由于我们要从域上的一个请求转到同一域中的另一个请求,难道不应该包含 SameSite=Strict
cookie 吗?这与默认为 strict-origin-when-cross-origin
的引用策略有什么关系吗? https://www.w3.org/TR/referrer-policy/ 没有提及任何有关 cookie 的内容
这是一个跨站点请求,因为初始导航是跨站点的(从 customer.site
到 our.site
)。跨站点请求永远不会发送严格的 cookie。请求被重定向(在本例中,重定向到 our.site
上的另一个 URL)并不重要,只是用户单击跨站点 link 的事实意味着请求是跨站的。
至于为什么会这样,是因为负责发起导航的origin对于防止跨站请求伪造很重要(CSRF)。想象一下,如果 https://evil.site
有一个 link 到 https://bank.site/transfer-funds
重定向到 https://bank.site/transact
。我们不希望在重定向后将 Strict cookie 发送到 /transact
端点,即使它是由同一站点重定向到的,因为发起源是跨站点的。
- 一位客户将 link 到他们网站上的我们的网页之一:customer.site/links.html
- 一个人点击那个 link 并被发送到我们的。site/webapp/handlerequest.aspx?someparam=somevalue
someparam
的值在SameSite=Strict
的 cookie 中设置,然后使用 302 重定向到 同一域中的另一个页面:
Request URL: https://our.site/webapp/handlerequest.aspx?someparam=somevalue
Request Method: GET
Status Code: 302
Remote Address: ...
Referrer Policy: strict-origin-when-cross-origin
cache-control: private
content-length: ...
content-type: text/html; charset=utf-8
date: ...
location: /webapp/someotheraction
server: Microsoft-IIS/10.0
set-cookie: someparam=somevalue; expires=Thu, 17-Mar-2022 14:41:13 GMT; path=/; secure; HttpOnly; SameSite=Strict
strict-transport-security: max-age=31536000
x-frame-options: SAMEORIGIN
浏览器 不 在 302 重定向到 /webapp/someotheraction 时包含此 cookie。
只有当我们专门更改代码以将此 cookie 设置为 SameSite=Strict
时,这种情况才会开始发生。
这发生在 Chrome、Firefox、Edge 和 IE(旧版 IE)
这是故意的吗?为什么?由于我们要从域上的一个请求转到同一域中的另一个请求,难道不应该包含 SameSite=Strict
cookie 吗?这与默认为 strict-origin-when-cross-origin
的引用策略有什么关系吗? https://www.w3.org/TR/referrer-policy/ 没有提及任何有关 cookie 的内容
这是一个跨站点请求,因为初始导航是跨站点的(从 customer.site
到 our.site
)。跨站点请求永远不会发送严格的 cookie。请求被重定向(在本例中,重定向到 our.site
上的另一个 URL)并不重要,只是用户单击跨站点 link 的事实意味着请求是跨站的。
至于为什么会这样,是因为负责发起导航的origin对于防止跨站请求伪造很重要(CSRF)。想象一下,如果 https://evil.site
有一个 link 到 https://bank.site/transfer-funds
重定向到 https://bank.site/transact
。我们不希望在重定向后将 Strict cookie 发送到 /transact
端点,即使它是由同一站点重定向到的,因为发起源是跨站点的。