【问题标题】:CSRF Token request securityCSRF Token 请求安全
【发布时间】:2015-10-29 20:29:07
【问题描述】:

我公司维护的 Drupal 网站有一个 REST 端点,使用 Drupal 服务(可能不那么相关)。我正在编写的系统之一必须通过 REST 将系统中的更改写入该网站。为此,我们首先必须“登录”到系统,为此我们获取会话令牌和 ID,然后必须从同一网站获取 CSRF 令牌。要获得这个令牌,我们必须向网站发出请求,提供我们之前获得的令牌和 id。之后,我们可以使用 token 和 id,结合 CSRF token 来发起编辑请求。

但是为什么必须首先请求这个 CSRF 令牌才能使这个系统更加安全?

【问题讨论】:

  • 它停止复制
  • 通过确保一次只能使用一个令牌?这对我来说仍然没有意义,因为您似乎还必须发送一个登录会话 cookie,它可用于随时请求新令牌。

标签: php security drupal drupal-7 csrf


【解决方案1】:

这是 CSRF 令牌的一个奇怪用途,它们主要用于阻止 3rd 方站点向站点表单端点提交表单数据。由于令牌是在呈现表单时发出的。然后,当用户 POST 时,它会检查令牌是否正确。它通过一个 cookie 来做到这一点。

但在您的情况下,它必须用于对 REST 调用进行身份验证,因为登录 ID 在不同的会话中必须保持相同,因此嗅探此 ID 的人可能会使用该 ID 伪造调用。所以使用令牌而不是每次都传递登录密码(这将是一个坏主意)。

【讨论】:

  • 但是,如果您不必在每次尝试放置或发布数据时都发送登录 cookie,这难道不是一种防止嗅探攻击的方法吗?无论哪种方式,相同的 cookie 都可用于请求新的 CSRF 令牌。
  • cookies 是特定于域的,因此尝试发布到您的端点的第 3 方站点将无法读取 cookie,因此无法获取令牌或使用令牌。 CSRF 的 CS 都是关于“跨站点”的,所以要阻止另一个站点发布数据。
【解决方案2】:

如果 Web 客户端也使用 REST API,则需要 CSRF 令牌来保护它免受 CSRF 的影响。

如前所述,这使得以服务器端方式使用起来很麻烦。他们可以在后端引入一个标志来指示帐户是使用 API 服务器端还是客户端,并且只需要令牌用于客户端使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-17
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 2017-06-29
    • 1970-01-01
    相关资源
    最近更新 更多