【问题标题】:Samesite=Strict cookies are not included in 302 redirects when user clicks link from a different domainSamesite=当用户点击来自不同域的链接时,302 重定向中不包含严格的 cookie
【发布时间】:2021-03-17 15:06:11
【问题描述】:
  1. 客户将链接到我们网站上的一个网页:customer.site/links.html
  2. 一个人点击该链接并被发送到 our.site/webapp/handlerequest.aspx?someparam=somevalue
  3. 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

【问题讨论】:

  • 这也发生在 iOS 14.4 上的 Safari 14 上

标签: cookies http-status-code-302 samesite


【解决方案1】:

这是一个跨站点请求,因为初始导航是跨站点的(从 customer.siteour.site)。严格的 cookie 永远不会在跨站点请求上发送。请求是否被重定向(在这种情况下,重定向到 our.site 上的另一个 URL)并不重要,只是用户单击了跨站点链接这一事实意味着请求是跨站点的。

至于为什么会这样,是因为负责启动导航的origin对于防止跨站请求伪造很重要(CSRF)。想象一下,如果https://evil.site 有一个指向https://bank.site/transfer-funds 的链接,它会重定向到https://bank.site/transact。我们不希望 Strict cookie 在重定向后发送到 /transact 端点,即使它是由同一个站点重定向到的,因为发起源是跨站点的。

【讨论】:

  • 我接受你的回答,我不是在和你争论,但我认为这很愚蠢。我们希望发布该 cookie。我想我们必须使用 samesite=Lax
  • 我相信带有 SameSite=Strict 的 cookie 仍然可以与客户端重定向一起使用,而不是使用 302。
猜你喜欢
  • 2017-06-10
  • 2010-11-19
  • 2016-04-06
  • 2021-07-03
  • 2020-06-21
  • 2020-01-21
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多