如何在开发环境中绕过SameSite Cookie限制?

时间:2020-05-26 02:25:01

标签: security cookies cross-domain

最近,Chrome更改了Cookie是否附加到跨域请求的策略。现在,除非以下条件,否则cookie不会附加到跨域请求中:

  1. SameSite cookie属性是LaxNone,并且请求是由用户操作发起的,或者
  2. SameSite cookie属性是None,而Secure cookie属性是true,这意味着跨域请求必须使用https方案。

(上面的命令是正确的,但略有简化。这里是a more thorough writeup。)

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

因此,任何需要cookie的东西都无法在我的开发环境中工作。 (是的,花了很长时间弄清楚那个……)

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

例如,如果有一种方法可以将localhost添加到我的浏览器的白名单中,即使没有SameSite=None属性,也允许Secure=true cookie,这将是很好的。稍差一些但仍然可以接受的是包装或代理我的http://localhost:<port>服务的简便方法,以便可以通过https方案对其进行访问。也许还有另一种方法使用一些晦涩的cookie魔术。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

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

或者,可以考虑为localhost或本地vm创建自签名证书,以更好地匹配您的生产环境-尽管涉及的程度稍微多一些。