【问题标题】:CSRF in Rails - Copying the authenticity tokenRails 中的 CSRF - 复制真实性令牌
【发布时间】:2021-12-10 07:21:58
【问题描述】:

我最近在阅读有关 CSRF 攻击以及 Rails 如何防御它们的文章,但有些东西我不理解,也找不到解释。

根据我对Nvisium's blog postThe official guides'This valuable video 的了解,Rails 通过以下方式防止 CSRF 攻击:

  1. 在每个表单中嵌入 authenticity_token
  2. 在处理 POST 请求时,将提交的令牌值与用户会话中关联的值进行比较。

我不明白的是: 由于 authenticity_token 是一个公开可用的值,不能通过简单地检查网页来访问,当攻击者可以简单地复制该值并将其插入恶意表单时,这种保护如何他/她正在创作。

当然,我的直觉告诉我它比这更复杂,但我找不到任何解释如何避免上述情况。如果您有解释或知道任何可以说明这一点的来源,我将不胜感激

【问题讨论】:

    标签: ruby-on-rails csrf


    【解决方案1】:

    authenticity_token 确保您的应用收到的任何提交都与应用知道的会话相匹配。它对进行中间人攻击的人没有帮助,但有助于防止人们随机向您的应用程序发送垃圾邮件。它不会阻止合法但恶意的用户向您的应用发送数据,只会阻止未遵循您的应用路径的用户。

    基本上,这种保护是针对服务器的,而不是针对客户端的。这绝不是对攻击的全面保护,但确实关闭了一种攻击途径。

    【讨论】:

    • 所以基本上有人可以通过访问会话数据并在表单中添加authentity_token字段来创建CSRF攻击?
    • 如果有人可以访问会话数据,他可以作为用户登录,不需要窃取 CSRF 令牌。无论如何,CSRF 令牌是在每次请求后随机创建的。
    【解决方案2】:

    我认为 JohnP 提到的重要部分是它“仅阻止未遵循您的应用路径的请求”。

    假设有人向您发送了一封电子邮件,其中包含一个链接,以支持 Stackoverflow 帖子,其描述如 点击此处获取资金。你点击这个链接,如果没有 CSRF,这个链接你实际上会支持这篇文章。但这不适用于 CSRF 预防,因为请求缺少随机令牌并将被拒绝。

    投票当然只是一个无害的例子,但它可能会泄露数据、更改会话状态或操纵最终用户的帐户。

    【讨论】:

      猜你喜欢
      • 2012-07-29
      • 2017-07-15
      • 2015-07-24
      • 2013-03-27
      • 2014-06-16
      • 2012-08-12
      • 1970-01-01
      • 2012-05-08
      • 2015-12-29
      相关资源
      最近更新 更多