2013-10-04 32 views
2

Django允许您指定会话在浏览器关闭时过期(对于Chrome有一些注意事项)。为什么它不这样做的CSRF cookie?Django CSRF Coo​​kie - 为什么不在浏览器关闭时过期?

我问,因为在我看来,CSRF令牌很容易泄漏(例如,错误地将它放在外部站点的帖子中),这将是一个缓解。我误解了什么吗?

回答

6

我会重新发布从卡尔链接开发商的名单我的答案,让计算器有它太:

如果cookie设定在浏览器关闭时过期的,它会导致CSRF对谁关闭用户 错误一个浏览器(或者在页面上加上一个 表单),然后从浏览器缓存中加载该页面,并提交表单。我对这个用例是否支持 (例如在移动设备上可能很重要), ,但我不相信将cookie设置为在浏览器关闭时过期 提供了很大的安全性好处正确配置 网站(HTTPS,HSTS等)。

Django的CSRF实现与存储 CSRF信息以及服务器会话信息的许多其他实现方式不同[1]。 CSRF 机制的功能是将表单中提供的令牌与在浏览器中作为cookie提供的令牌进行匹配。如果您将cookie设置为 'zzz',它仍然可以很好地运行。安全来自于 这一事实,即攻击者无法设置cookie,而不是发生 以包含任何特定的加密值。

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

尽管如此,如果能够令人信服地证明,设置cookie 在浏览器关闭到期不会破坏现有的使用情况(移动 浏览器是我的主要关注)我会开到更改默认 行为。我们通常认为这是一个错误,如果任何非恶意用户可以通过无辜的行为触发CSRF警告。

[1] Django的CSRF实现通常衬托各种虚假 警报在大多数笔测试工具,因为它不工作完全 同样的方式其他实现做的,是不依赖于会话 曲奇饼。

+0

感谢您的回答。问题并不在于攻击者访问用户的物理计算机,而是缓解CSRF令牌的潜在泄漏。我在这里看不到任何缓解。 – AdamC

+0

如果您对意外泄露CSRF令牌的方式有所了解,我希望通过电子邮件了解它们。除了故意错误的代码(将CSRF保护的表单发布到另一个网站,或允许用户创建此类表单或控制发布目标)之外,我并不知道这样的事情。 –

+0

我很好奇用户在公用计算机上的情况。除非我误解整个过程,否则攻击者不能跳到公共计算机上并获取令牌,然后试图欺骗使用同一终端的人?此时,攻击者将拥有csrftoken(因为它不会关闭并且会话无关),并且创建请求很容易。如果我没有错过简单的事情,我们如何防止这种情况发生? – bgoers

相关问题