2

我有一个 Django 站点,它使用 Django 的 csrf-token 来防止 csrf 攻击。公众可以访问其中一种表格,包括未登录的人。

Csrf Token 应该提供对跨域请求的保护。

编辑:(引用我的评论)“但是,如果在不需要授权的情况下允许发布请求,csrf 并不比一个琐碎的垃圾邮件过滤器更好(验证码在这里会做得更好)。事实上,这应该是一个安全风险在不需要身份验证的页面中包含 CSRF 令牌(例如 30 分钟后过期)。(但我的网站正在这样做,这就是我首先发表这篇文章的原因)”

此外,在这种情况下,可以在浏览器 js 控制台中获取该页面,通过某些特定的 xpath 获取 csrf 令牌,然后使用该 csrf 发布一些任意数据。此外,步骤很容易重现,可以为该站点或任何 Django 站点设计特定的攻击,因为您每次都会找到除“csrfmiddlewaretoken”之外的 csrf 令牌(包括 reddit、pinterest 等网站)。

据我所知,除了让它有点困难之外,csrf 令牌并没有太大帮助。

我错过了它的一个方面吗?我的实施错了吗?如果我是对的,让你的 csrf 令牌在你的 html 源代码中飞来飞去(尤其是那些不需要任何身份验证的)是愚蠢的吗?

4

2 回答 2

3

这个问题对同一件事有几个非常好的答案。此外,那里的最后一个答案解决了这样一个事实,即在技术上可以抓取令牌的表单(通过 javascript),然后用它提交一个发布请求(通过 javascript)。但是受害者必须登录。

CSRF 保护的重点是专门防止欺骗随机用户。它与客户端漏洞利用无关。您还必须考虑部分保护包括拒绝跨站点源请求。该请求必须来自与目标站点相同的来源。

归根结底,CSRF 是有价值的。它是一个保护区域,但不是全部。你不能防御一切。

引用关于 CSRF 的博客文章

秘密隐藏表单值。为每个表单发送一个唯一的服务器表单值(通常与用户会话相关),并验证您在表单发布中获得的值是否相同。由于 XmlHttpRequest 函数中的同域请求限制,攻击者不能简单地通过 JavaScript 将您的远程表单作为目标用户抓取。

...以及感兴趣的评论:

我不是 javascript 向导,但是否可以在恶意页面上的隐藏 iframe 中加载远程页面,用 javascript 解析它以找到隐藏的令牌,然后填充用户(大概)即将提交的表单正确的价值观?

  • 大卫古德温 2008 年 9 月 24 日凌晨 2:35

@David Goodwin:不,同源策略会阻止恶意页面读取 iframe 的内容。

  • 里科 2008 年 9 月 24 日凌晨 3:03
于 2012-06-09T23:02:35.947 回答
0

如果您的表单是公开的并且不需要身份验证,那么没有什么可以阻止任何人(包括恶意站点/插件/人员)向其发布。这个问题被称为垃圾邮件,而不是 CSRF。

阅读:http ://en.wikipedia.org/wiki/Cross-site_request_forgery

CSRF 涉及一个恶意站点通过假装是经过身份验证的用户张贴到您的表单。

于 2012-06-09T19:33:33.637 回答