【问题标题】:CSRF token in page source页面源中的 CSRF 令牌
【发布时间】:2020-12-02 15:56:15
【问题描述】:

如果令牌在页面源中可见(即隐藏的输入字段),这不会破坏目的吗?令牌只能从页面源中获取。可能是我想多了,但是 CSRF 令牌不应该只在成功登录时生成吗?

【问题讨论】:

    标签: php csrf


    【解决方案1】:

    CSRF 令牌应该在与客户端建立会话之后生成,而不必仅在身份验证之后生成。正如您所建议的,恶意网站仍然可以通过抓取页面源从您的网站获取 CSRF 令牌,但他们收到的 CSRF 令牌对目标用户的会话无效。

    在会话级别使用 CSRF 令牌的另一个优点是,您还可以保护您的身份验证表单免受 CSRF 攻击。您需要创建会话预身份验证才能使其正常工作。

    【讨论】:

      【解决方案2】:

      页面中的 CSRF 令牌与与浏览器关联的 CSRF 令牌(例如通过 cookie 或会话)进行比较。

      所以考虑一下这种攻击:

      1. 攻击者向 Good Site 发出请求并获取 CSRF 令牌
      2. 攻击者将该令牌注入到其 Evil™ 站点上的表单中
      3. 受害者访问 Evil™ 站点,页面上的 JS 立即将表单提交给 Good Site
      4. Good Site 将表单数据中的 CSRF 令牌与与受害者浏览器关联的令牌进行比较。 它们不匹配,因为攻击者没有从传递给受害者的页面源中获取令牌;他们必须提出自己的要求。

      受害者和良好站点是安全的。

      【讨论】:

      • 有道理!谢谢你。正如我想的那样,我只是想多了。
      【解决方案3】:

      CSRF 令牌与身份验证没有直接关系,它们可以用于任何形式。 CSRF 令牌的目的是关联两件事:

      • 请求表单的用户。
      • 提交表单的用户。

      一般的做法是这样的:

      • 当您显示表单时,您可以通过在 cookie 中发送令牌或将其与现有会话 cookie 关联来将令牌与用户相关联。您还可以将其作为隐藏字段包含在表单中。
      • 当您收到表单提交时,您会从隐藏字段中查看 CSRF 令牌,并将其与 cookie 或会话中的令牌进行比较。如果它们不匹配,则不是同一用户。

      此检查很重要的原因是恶意用户可以查看您网站上的表单,复制和操作它,然后诱骗用户提交它。对于您的服务器,这看起来像是用户提交了真实的表单,因此如果没有 CSRF 检查,您将接受来自受害者而非攻击者的指令。

      【讨论】:

        猜你喜欢
        • 2021-10-19
        • 2014-02-06
        • 2021-06-19
        • 1970-01-01
        • 1970-01-01
        • 2022-01-13
        • 1970-01-01
        • 2017-10-30
        • 2022-11-07
        相关资源
        最近更新 更多