Django CSRF Cookie-为什么它不会在浏览器关闭时过期?

亚当·C

Django允许您指定会话在浏览器关闭时到期(对Chrome有一些警告)。它为什么不对CSRF cookie进行处理?

我之所以问是因为,在我看来,CSRF令牌很容易被泄漏(例如,错误地将其放入外部站点的帖子中),这将对此有所缓解。我误会了吗?

保罗·麦克米兰

我将从Carl链接的开发人员列表中重新发布我的答案,以便stackoverflow也拥有它:

如果将Cookie设置为在浏览器关闭时到期,则对于以下用户而言,这将导致CSRF错误:关闭浏览器(或将页面上带有表单的页面添加为书签),然后从浏览器缓存中加载该页面并提交表单。我对此用例是否值得支持(例如,在移动设备上可能很重要)持矛盾态度,但我不认为将Cookie设置为在浏览器关闭时过期会为原本配置正确的网站带来很大的安全利益(HTTPS,HSTS等)。

Django的CSRF实现与许多其他[CS]实现不同,后者将CSRF信息与会话信息一起存储在服务器上。CSRF机制通过将以形式提供的令牌与作为浏览器中的cookie提供的令牌进行匹配而起作用。如果您将Cookie设置为“ zzz”,它仍然可以正常运行。安全性来自以下事实:攻击者无法设置cookie,而不是它恰好包含任何特定的加密值。

如果担心的是攻击者可以在会话之间访问用户的物理计算机并窃取CSRF令牌,则将其设置为在浏览器关闭时到期不会阻止攻击者插入已知值的cookie,该cookie将在下一个会话中使用。我不相信我们可以保护攻击者已经物理访问过其计算机的用户的令牌。

不过,如果可以令人信服地证明将cookie设置为在浏览器关闭时到期不会破坏现有用例(我主要关注移动浏览器),那么我愿意更改默认行为。如果任何非恶意用户可以通过无辜行为触发CSRF警告,则通常将其视为错误。

[1] Django的CSRF实现通常会在大多数笔测试器工具中引发各种错误警报,因为它的工作方式与其他实现方式不完全相同,并且与会话cookie无关。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档