如何在我的开发环境中绕过 SameSite cookie 限制?
How can I bypass SameSite cookie restrictions in my development environment?
最近,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
cookie 的来源白名单,即使没有 Secure=true
属性,那就太好了.稍微不那么好,但仍然可以接受,将是一种包装或代理我的 http://localhost:<port>
服务的简单方法,以便可以通过 https
方案访问它们。或者也许还有另一种方法使用一些晦涩的 cookie 魔法。
2021-09-16更新:@tommueller指出this question是相关的。这个问题的不同之处在于它讨论的是 [cross origin but] same site 情况,其中两个来源都来自本地主机。
如果您的所有开发环境都托管在 localhost
下,那么不同端口之间的请求,虽然跨域,仍然算作同一站点。参见:https://web.dev/same-site-same-origin/
在您的开发环境中,您可以完全删除 SameSite=None; Secure
或显式设置 SameSite=Lax
.
或者,考虑为 localhost
或本地虚拟机创建自签名证书以更好地匹配您的生产环境 - 尽管这稍微复杂一些。
在撰写本文时,如果未指定,Firefox 不会将 same-site
默认为 lax
,但 Chrome 会。可以在 Chrome 此处禁用此标志,但警告说这会禁用您访问的 所有 站点的标志,而不仅仅是您的开发站点。
chrome://flags/#same-site-by-default-cookies
最近,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
cookie 的来源白名单,即使没有 Secure=true
属性,那就太好了.稍微不那么好,但仍然可以接受,将是一种包装或代理我的 http://localhost:<port>
服务的简单方法,以便可以通过 https
方案访问它们。或者也许还有另一种方法使用一些晦涩的 cookie 魔法。
2021-09-16更新:@tommueller指出this question是相关的。这个问题的不同之处在于它讨论的是 [cross origin but] same site 情况,其中两个来源都来自本地主机。
如果您的所有开发环境都托管在 localhost
下,那么不同端口之间的请求,虽然跨域,仍然算作同一站点。参见:https://web.dev/same-site-same-origin/
在您的开发环境中,您可以完全删除 SameSite=None; Secure
或显式设置 SameSite=Lax
.
或者,考虑为 localhost
或本地虚拟机创建自签名证书以更好地匹配您的生产环境 - 尽管这稍微复杂一些。
在撰写本文时,如果未指定,Firefox 不会将 same-site
默认为 lax
,但 Chrome 会。可以在 Chrome 此处禁用此标志,但警告说这会禁用您访问的 所有 站点的标志,而不仅仅是您的开发站点。
chrome://flags/#same-site-by-default-cookies