首页 文章

在不需要身份验证的页面中包含'CSRF token'是否存在安全风险?

提问于
浏览
2

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

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

Edit: (引自我的评论)"But, in case of post requests that are allowed without requiring authorization, csrf is no better than a trival spam filter(captcha would do better here). In fact, it should be a security risk to include CSRF token(that expire after say, 30 mins) in pages that require no authentication what so ever.(but my site is doing it, which is why I made this post in the first place)"

此外,在这种情况下,可以在浏览器js控制台中获取该页面,通过某个特定的xpath获取csrf令牌,然后使用该csrf发布一些任意数据 . 此外,步骤易于重现,人们可以设计针对该网站的特定攻击,或任何Django网站,因为你每次都会找到除了_952906之外的csrf令牌(包括像reddit,pinterest等网站) .

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

是否有一个方面,我失踪了?我的实施错了吗?如果我是正确的,让你的csrf令牌在你的html源代码中飞来飞去是愚蠢的(特别是那些不需要任何身份验证的人)?

2 回答

  • 3

    This question有很多关于同样事情的答案 . 此外,那里的最后一个答案解决了这样一个事实:它在技术上可以刮掉令牌的形式(通过javascript),然后用它提交一个帖子请求(通过javascript) . 但受害者必须登录 .

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

    总而言之,CSRF具有 Value . 它是一个保护区,但它不是最终的全部 . 你不能防御一切 .

    引自a blog post about CSRF

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

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

    我不是一个javascript向导,但是可以在恶意页面上的隐藏iframe中加载远程页面,用javascript解析它以找到隐藏的令牌,然后填充用户(可能)即将提交的表单有正确的 Value 观? David Goodwin于2008年9月24日凌晨2:35 @David Goodwin:不,同源策略会阻止恶意页面读取iframe的内容 . Rico于2008年9月24日凌晨3:03发布

  • 0

    如果您的表单是公开的并且不需要身份验证,则不会阻止任何人(包括恶意站点/插件/人员)发布到该表单 . 这个问题被称为垃圾邮件,而不是CSRF .

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

    CSRF涉及通过 pretending to be an authenticated user 向您的表单发布恶意站点 .

相关问题