Django允许您指定会话在浏览器关闭时到期(对Chrome有一些警告).为什么不为CSRF cookie做到这一点?
我问,因为在我看来,CSRF令牌容易被泄露(例如,错误地将其放入到外部站点的帖子中),这将是一种缓解.我误会了什么吗?
我将从Carl链接的开发人员列表中重新发布我的答案,以便stackoverflow也有:
如果cookie在浏览器关闭时设置为过期,则会对关闭浏览器的用户(或将页面上带有表单的页面加入书签)导致CSRF错误,然后从浏览器缓存加载该页面并提交表单.我对这个用例是否值得支持感到矛盾(例如,它可能在移动设备上很重要),但我不认为将cookie设置为在浏览器关闭时到期会为其他正确配置的站点提供很多安全性好处(HTTPS,HSTS等).
Django的CSRF实现与存储CSRF信息以及服务器上的会话信息的许多其他实现不同[1].CSRF机制通过将表单中提供的令牌与在浏览器中作为cookie提供的令牌进行匹配来起作用.如果您将cookie设置为'zzz',它仍然可以很好地运行.安全性来自以下事实:攻击者无法设置cookie,而不是碰巧包含任何特定的加密值.
如果担心攻击者可以在会话之间访问用户的物理计算机并窃取CSRF令牌,则将其设置为在浏览器关闭时到期将不会阻止攻击者插入将在下一个会话期间使用的已知值的cookie.我不相信我们可以保护攻击者物理访问过计算机的用户的令牌.
尽管如此,如果可以令人信服地证明将cookie设置为在浏览器关闭时到期并不会破坏现有的用例(移动浏览器是我主要考虑的问题),我会乐于改变默认行为.如果任何非恶意用户可以通过无辜行为触发CSRF警告,我们通常认为这是一个错误.
[1] Django的CSRF实现通常衬托各种误报大多数笔测试工具,因为它不正是相同的方式工作的其他实现方式做的,是不依赖于会话cookie.
| 归档时间: |
|
| 查看次数: |
3592 次 |
| 最近记录: |