Gadzan

Chrome/Edge 91版本SameSite by default cookies被移除后的解决方案

2021/10/10 更新:

⛔请注意!⛔

此方法在最新版 Chrome 94 上已无效


上周五早上一打开电脑准备开发项目时候, 突然发现网站登录跳转有异常, 怎么都登录不上一直跳回登录页. 通过抓包排除了后端的原因后, 发现后端的set-cookie没有效果, 突然想起Chrome禁用第三方Cookies的计划, 打开Edge的更新记录发现已经自动更新到Chromium 91了.

迅速找到Chromium的更新日志(Mar 18, 2021)

The flags #same-site-by-default-cookies and #cookies-without-same-site-must-be-secure have been removed from chrome://flags as of Chrome 91, as the behavior is now enabled by default. In Chrome 94, the command-line flag --disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure will be removed.

因为开发环境需要, 我们把浏览器的same-site-by-default-cookiescookies-without-same-site-must-be-secure两项都在flag里禁用了. 但是更新到91版本后, Chromium直接把选项给关了而且设置成默认开启, 那就没办法在flag里设置了.

但是文中还写了"In Chrome 94, the command-line flag --disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure will be removed", 也就是说这个SameSiteByDefaultCookiesCookiesWithoutSameSiteMustBeSecure还没有被移除, 但是这个所谓的command-line flag是个什么东西呢?

这个command-line flag是指在启动Choromium时所带的参数, 在windows中可以通过修改应用的快捷方式目标属性来给启动的应用加上参数.

Chromium支持的command-line flag, 具体操作过程如下:

  1. 在右击Chrome/Edge的快捷方式, 点击"属性".

  2. 在"目标(Target)"属性中末尾加上

 --disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure

然后重启浏览器就可以了. 但是这种办法不是long term solution, Chromium 94后会连comman-line的方式也移除, 按照官方的说法是因为如果任由开发者禁用这两个选项, 开发者就会变成容易被攻击的目标. 因此为了保护开发者, Chromium选择逐渐关闭这个通道.

以后如果要在开发环境作业, 老老实实上https也许是最简单的一种办法.

6/10 更新:
评论下有问到http页面请求https跨站cookie携带问题的, 除了用command-line的方法, 可以在flag里把Schemeful Same-Site这个选项禁用掉试试. 详细的原理可以查看这篇文章的Schemeful Same-Site部分.

评论下有问到Mac系统怎么解决.
首先关闭浏览器, 打开终端输入以下指令:

open -a "Google Chrome" --args --disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure

如果是Edge的话则是:

open -a "Microsoft Edge" --args --disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure

打赏码

知识共享许可协议 本作品采用知识共享署名 4.0 国际许可协议进行许可。

评论