最近,Chrome 更改了是否将 cookie 附加到跨域请求的策略。现在,cookie 不会附加到跨域请求,除非:
SameSite
cookie 属性是 Lax
或 None
并且请求是由用户操作发起的,或者 SameSite
cookie 属性是 None
和 Secure
cookie 属性是 true
,这意味着跨域请求必须使用 https
方案。 (上面没有错,只是稍微简化了。这里是 a more thorough writeup 。)
在我的开发环境中,我使用一个工具来编译我的开发语言并将更改热加载到我的浏览器选项卡中。这个工具在自己的端口上提供前端代码,后端由一个单独的进程在一个单独的端口上提供服务,所以我们正在处理从浏览器到后端的跨域请求。当然,前端和后端都来自
localhost
与方案 http
.前端应用程序发出的许多请求不是由用户操作发起的,但仍需要 cookie 以进行身份验证。因此,任何需要 cookie 的东西都无法在我的开发环境中运行。 (是的,花了很长时间才弄清楚那个……)
我的问题是:如何绕过、解决或禁用这些
SameSite
以一种简单的方式为我的开发环境设置 cookie 安全限制,在我浏览其他站点时不会降低我的安全性?例如,如果有一种方法可以添加
localhost
,那就太好了。到我的浏览器中允许的来源白名单 SameSite=None
即使没有 Secure=true
的 cookie属性。稍微不太好,但仍然可以接受,这将是包装或代理我的 http://localhost:<port>
的简单方法服务,以便可以通过 https
访问它们方案。或者也许还有另一种使用一些晦涩的 cookie 魔法的方法。2021-09-16 更新: @tommueller 指出 this question相关的。这个问题的不同之处在于它讨论了 [跨源但] 相同站点的情况,其中两个源都来自本地主机。
最佳答案
如果您的所有开发环境都托管在 localhost
下然后不同端口之间的请求,虽然跨域,仍然算作同站点。见:https://web.dev/same-site-same-origin/
在您的开发环境中,您可以删除 SameSite=None; Secure
完全或明确设置 SameSite=Lax
.
或者,查看为 localhost
创建自签名证书或本地虚拟机以更好地匹配您的生产环境 - 尽管这涉及更多。
关于security - 如何在我的开发环境中绕过 SameSite cookie 限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62013644/