【问题标题】:Previously set "Samesite: Strict" cookie not available in document.cookie Firefox and Safari之前设置的“Samesite: Strict”cookie 在 document.cookie Firefox 和 Safari 中不可用
【发布时间】:2019-08-06 21:41:00
【问题描述】:

我们在用户会话开始时为 XSRF/CSRF 设置了 cookie。在某些时候,用户导航到不同的域(例如支付),执行一些操作,并导航到我们的域。返回我们的域后,Firefox 和 Safari 无法读取设置为相同站点的 cookie:严格,Chrome 可以。如果是 Chrome 和 Firefox(但不是 Safari),它会显示在 cookie 的开发者工具部分下。

samesite explanation on MDN 解释说,在未来的请求中,cookie 将在请求标头中一起发送。对于所有三种浏览器,情况都是如此。解释没有定论的是是否应该可以通过document.cookie读取这个cookie。对于 Firefox、Safari 和 Chrome,我们可以读取“Lax”cookie,但对于 Chrome,我们可以读取“Strict”cookie。在页面刷新时也是如此,但在打开新选项卡时(即仅通过导航)则不然。

这是 Safari 和 Firefox 或 Chrome 中的错误 - 还是规范不确定?规范(w3?)是什么?

可以使用带有两个虚拟主机 test.internalsite.comtest.externalsite.com 的网络服务器轻松地在本地重新创建它,并且这些页面带有一些 PHP:

<?php
  setcookie("CSRFLax", "hiLax", array("path"=>"/", "samesite"=>"Lax", "domain"=>"test.internalsite.com"));
  setcookie("CSRFStrict", "hiStrict", array("path"=>"/", "samesite"=>"Strict", "domain"=>"test.internalsite.com"));
?>
<html>
  <body>External site
      <p><a href="http://test.externalsite.com">Go to External site</a></p>
      <p>Document cookie: <script>document.write(document.cookie);</script></p>
  </body>
</html>

<html>
  <body>External site
    <a href="http://test.internalsite.com">Go to internal Site</a>
  </body>
</html>

【问题讨论】:

  • 很遗憾没有人回答您的问题。我们目前面临同样的困难,对我来说这看起来像是 Firefox 中的一个错误。即使在通过外部链接打开页面后设置,它也无法访问任何SameSite Cookie。 Safari 看起来不错。不过,设置 window.location 似乎有点奇怪。
  • 我不太确定这是 Firefox 中的错误,或者他们只是遵循规范,而 Safari 和 Chrome 则不是(到目前为止,我认为这是正在发生的事情)
  • 我很确定这是一个错误,您无法设置任何 SameSite=strict cookie 之后您通过外部链接登陆页面
  • 幸运的是,Firefox 总线已解决,但 Safari/WebKit 错误仍然存​​在。

标签: firefox cookies safari csrf samesite


【解决方案1】:

按照我们的安全官的建议,他不倾向于讨论使用“宽松”cookie 而不是“安全”cookie 的可能性(我认为除了语义之外没有其他原因),我们实施了一个简单的解决方法通过刷新页面。这可以在 Chrome 和 Safari 中检索 Strict cookie。

var canReadStrictCookie = function(cookies) {
  return cookies.toLowerCase().indexOf('mySameSiteSecureCookieName') !== -1;
};

if(document.location.href.indexOf('jmkCheck') === -1 && !canReadStrictCookie(document.cookie)){
  document.location.href='?jmkCheck';
}

如果您自己控制 Cookie,我强烈建议您使用“宽松”设置。这个名字让人迷惑,它的安全性并不松懈(事实上它比引入同一站点之前更安全)。

【讨论】:

    猜你喜欢
    • 2019-04-02
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 2020-06-21
    • 1970-01-01
    相关资源
    最近更新 更多