6

最近,Chrome 更改了 cookie 是否附加到跨域请求的政策。现在,cookie 不会附加到跨域请求,除非:

  1. SameSitecookie 属性是LaxorNone并且请求是由用户操作发起的,或者
  2. SameSitecookie 属性为None,cookieSecure属性为true,表示跨域请求必须使用该https方案。

(上面没有错,只是稍微简化了一点,这里写的比较透彻。)

在我的开发环境中,我使用一个工具来编译我的开发语言并将更改热重新加载到我的浏览器选项卡中。该工具在自己的端口上提供前端代码,后端由单独的进程在单独的端口上提供服务,因此我们正在处理从浏览器到后端的跨域请求。自然,前端和后端都由localhostscheme提供服务http。前端应用程序发出的许多请求不是由用户操作发起的,但仍需要 cookie 用于身份验证。

结果,任何需要 cookie 的东西在我的开发环境中都不起作用。(是的,花了很长时间才弄清楚那个……)

我的问题是:如何SameSite以一种简单的方式绕过、解决或禁用我的开发环境的这些 cookie 安全限制,而不会降低我在浏览其他网站时的安全性?

例如,如果有一种方法可以添加localhost到我的浏览器中的来源白名单中,即使没有属性也允许SameSite=Nonecookie,那就太好了。Secure=true稍微不那么好,但仍然可以接受,将是包装或代理我的http://localhost:<port>服务的一种简单方法,以便可以通过该https方案访问它们。或者,也许还有另一种使用一些不起眼的 cookie 魔法的方法。

2021-09-16 更新: @tommueller 指出这个问题是相关的。这个问题的不同之处在于它讨论了 [cross origin but] 相同的站点情况,其中两个来源都来自 localhost。

4

2 回答 2

7

如果您的所有开发环境都托管在localhost不同端口之间的请求下,虽然跨域,但仍算作同站点。见:https ://web.dev/same-site-same-origin/

在您的开发环境中,您可以SameSite=None; Secure完全删除或显式设置SameSite=Lax

或者,考虑为localhost或本地虚拟机创建自签名证书以更好地匹配您的生产环境 - 尽管这涉及更多。

于 2020-05-30T12:53:13.573 回答
2

在撰写本文时,Firefox 并未默认same-sitelax未指定时,但 Chrome 会。可以在此处的 Chrome 中禁用此标志,但警告这会禁用您访问的所有站点的标志,而不仅仅是您的开发站点。

chrome://flags/#same-site-by-default-cookies

来源:https ://www.chromium.org/updates/same-site/faq

于 2021-02-17T05:25:46.980 回答