Spo*_*ork 10 cookies safari firefox csrf samesite
我们在用户会话开始时为 XSRF/CSRF 设置了一个 cookie。在某些时候,用户导航到不同的域(例如支付),执行一些操作,然后导航到我们的域。返回我们的域后,Firefox 和 Safari 无法读取设置为相同站点的 cookie:Strict,Chrome 可以。对于 Chrome 和 Firefox(但不是 Safari),它确实显示在 cookie 的开发人员工具部分下。
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>
Run Code Online (Sandbox Code Playgroud)
和
<html>
<body>External site
<a href="http://test.internalsite.com">Go to internal Site</a>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
根据我们的安全官员的建议,他不愿意讨论使用“Lax”cookie 代替“Secure”cookie 的可能性(因为我认为除了语义之外没有其他原因),我们通过刷新页。这可以检索 Chrome 和 Safari 中的严格 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';
}
Run Code Online (Sandbox Code Playgroud)
如果您自己可以控制 cookie,我强烈建议您使用“宽松”设置。这个名字令人困惑,这并不是安全性松懈(事实上,它比引入同站点之前更安全)。
| 归档时间: |
|
| 查看次数: |
1577 次 |
| 最近记录: |