会话cookie集`SameSite = None;安全;`不起作用

时间:2020-08-22 09:52:42

标签: javascript cookies samesite csrf-token

我添加了SameSite = None;安全;设置cookie。但是未设置Cookie,因此无法登录到我的网站。

response.writeHead(200, {
  'Content-Type': 'application/json',
  'Set-Cookie': 'token=' + token + '; SameSite=None; Secure; Expires=' + time.toUTCString() + '; Path=/' + '; Domain=' + hostname,
  'csrf-token': csrfToken
});

我查看了开发人员工具中“应用程序”>“存储”>“ Cookies”下的cookie,并查看了更多详细信息。它显示警告消息:

此set-cookie被阻止,因为它不是通过安全连接发送的

chrome阻止cookie,因为我在开发环境中工作并且发送http请求。但是此测试在Firefox浏览器上正确登录。
我在cookie中放入了安全一词,并且可以正常使用,但是因为 samesite = none 旁边必须使用安全一词,所以>跨域,否则Cookie将被阻止。
我的问题是为什么当我使用安全时,只有Chrome浏览器会阻止cookie,而在其他浏览器中却是如此。 而且,如果我不使用安全,那么我将无法测试支付网关,因为如果我不使用安全协议,它将阻止Chrome异域访问。

2 个答案:

答案 0 :(得分:2)

我的问题是为什么当我使用安全时,只有Chrome浏览器会阻止 cookie,但在其他浏览器中确实如此

我不确定其他浏览器,但Chrome实施了根据此IETF draft通过安全连接允许具有secure属性的cookie的策略。

虽然此草案是为Chrome实施的,但不是在Firefox上,这就是为什么您在Firefox中转到about:config > network.cookie.sameSite.noneRequiresSecure的原因,默认值为 false

如果您只需要针对本地开发环境执行此操作,则可以通过禁用

来保留chrome中Cookie的旧行为。
  1. chrome:// flags /#same-site-by-default-cookies
  2. chrome:// flags /#cookies-without-same-site-must-be-secure

我必须支持旧版HTTP客户端,但是如果我使用https://来源 安全,我无法从http设置cookie,而且我无法访问它 来自http的cookie,我的目标是拥有SameSite = None,在http和 在http://来源,任何想法上都不安全,而不是建立 谷歌办公室附近发生抗议?

鉴于这将在不久的将来成为标准,我怀疑您是否能够为客户端应用程序实现这种行为,只有路由是安全的HTTPS。

参考:

  1. https://web.dev/samesite-cookies-explained/#changes-to-the-default-behavior-without-samesite
  2. https://redmondmag.com/articles/2020/01/28/samesite-cookie-changes-break-apps.aspx

答案 1 :(得分:2)

Sometome cookie无法正常工作,因为某些cookie滥用了sameSite属性。 Cookie SomeCookie被拒绝的原因是它具有sameSite=none属性,但缺少secure属性。因此,任何请求SameSite=None的cookie都必须标记为Secure

Set-Cookie: product=pen; SameSite=None

要解决此问题,必须将Secure属性添加到SameSite=None cookie中。

Set-Cookie: flavor=choco; SameSite=None; Secure

安全Cookie仅通过HTTPS协议以加密请求发送到服务器。

注意:不安全的网站(http:)无法使用Secure指令设置Cookie。