即使指定了 samesite=none,浏览器也会使用 samesite=lax

Posted

技术标签:

【中文标题】即使指定了 samesite=none,浏览器也会使用 samesite=lax【英文标题】:Browser uses samesite=lax even if samesite=none is specified 【发布时间】:2022-01-04 09:29:06 【问题描述】:

我正在尝试通过 iframe 将我的 Angular 应用程序嵌入到另一个站点。在我的 Angular 应用程序中,我正在设置 cookie,因此当我尝试将 Angular 应用程序嵌入到我的其他站点时,Devtools 显示一个问题,它告诉我,未设置 samesite=none,因此正在使用默认的 samesite=lax,这会阻止 Angular 应用程序设置 cookie。

之后我尝试在响应标头中设置条目“set-cookie:samesite=none;secure”,但没有成功。正如您在下面的屏幕截图中看到的,浏览器仍然使用“same-site=lax”。

此问题发生在 Chrome 和 Edge(Chromium) 上,但不在 Firefox 上。

问题:

我想知道我是否错误地使用了同站点设置? 尽管我使用“samesite=none;secure”,但为什么浏览器会显示此消息?

截图

【问题讨论】:

【参考方案1】:

问题

您误解了Set-Cookie 的语法,并且错误地省略了cookie 的名称和值。查看the MDN page on the topic:

cookie 定义以名称-值对开头。

相应地,当浏览器收到带有以下标头的响应时,

set-cookie: samesite=none; secure

它创建(或更新)一个Secure cookie,其namesamesite,其none。因为没有指定SameSite 属性,并且因为Chromium now defaults to Lax for the SameSite attribute,所以生成的cookie 会被您的浏览器有效地标记为SameSite=Lax

解决方案

要解决此问题,您必须为 cookie 选择名称和值,并且必须在任何其他 cookie 属性之前指定 cookie 的名称和值:

Set-Cookie: <cookie-name>=<cookie-value>; SameSite=None; Secure

【讨论】:

以上是关于即使指定了 samesite=none,浏览器也会使用 samesite=lax的主要内容,如果未能解决你的问题,请参考以下文章

SameSite=None w/ IE11 中的安全中断 iFrame

即使设置了 sameSite:'none' 和 secure: true 对于 MERN 堆栈 Web 应用程序,Cookie 也不会保存在 chrome 中

Flask cookie 没有 SameSite 属性

SameSite=None .htaccess 正则表达式问题

无法为 spring boot 1.5.22 设置 cookie samesite=none

对于未来chrome80 samesite问题的兼容解决方案