【发布时间】:2012-06-13 08:50:11
【问题描述】:
我有一个 Django 站点,它使用 Django 的 csrf-token 来防止 csrf 攻击。其中一种表格可供公众访问,包括未登录的人。
Csrf Token 应该可以防止跨域请求。
编辑:(引用我的评论) “但是,在不需要授权的情况下允许发布请求的情况下,csrf 并不比一个简单的垃圾邮件过滤器更好(验证码在这里会做得更好)。事实上,包含 CSRF 令牌应该是一个安全风险(说后过期) , 30 分钟)在不需要身份验证的页面中。(但我的网站正在这样做,这就是我首先发布这篇文章的原因)”
另外,在这种情况下,可以在浏览器 js 控制台中获取该页面,通过某些特定的 xpath 获取 csrf 令牌,然后使用该 csrf 发布一些任意数据。此外,步骤很容易重现,可以为该站点或任何 Django 站点设计特定的攻击,因为您每次都会发现除了 'csrfmiddlewaretoken' 之外的 csrf 令牌(并且包括像reddit、pinterest 等)。
据我所知,csrf 令牌除了让它有点困难之外,并没有太大帮助。
我缺少它的某个方面吗?我的实施错了吗?如果我是对的,让你的 csrf 令牌在你的 html 源中到处乱飞是愚蠢的吗(尤其是那些不需要任何身份验证的)?
【问题讨论】:
-
您描述的攻击他人的过程是怎样的?似乎您只是作为会话的所有者执行手动客户端发布。
-
是的,但前提是我这样做。如果它是安装在某人浏览器中的恶意插件,则该插件可以通过简单的 get 请求获取表单,获取 csrf 令牌并使用它发布表单。如果某些不需要身份验证但包含表单(带有 csrf 令牌)的 GET 请求,似乎很容易绕过 csrf。
-
它不应该是对恶意插件的防御。这是对跨站点请求伪造的防御,因此得名。
-
那么它实际上提供了什么安全性?人们可以强化 csrf,也可以强化会话,那么它如何使它更安全?
标签: django security csrf django-csrf csrf-protection