【发布时间】: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.com 和 test.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 报告的错误:bugzilla.mozilla.org/show_bug.cgi?id=1617158bugs.webkit.org/show_bug.cgi?id=208049
-
幸运的是,Firefox 总线已解决,但 Safari/WebKit 错误仍然存在。
标签: firefox cookies safari csrf samesite