gpt4 book ai didi

node.js - 为什么 Express/Connect 会在每次请求时生成新的 CSRF token ?

转载 作者:搜寻专家 更新时间:2023-10-31 22:33:40 25 4
gpt4 key购买 nike

据我所知,有两种方法可以防止 CSRF 攻击:1) token per session,和 2) token per request

1) 在第一种情况下,CSRF token 仅在用户 session 初始化时生成一次。因此用户一次只有一个有效 token 。

2) 在第二种情况下,每个请求都会生成新的 CSRF token ,之后旧 token 将失效。这使得利用该漏洞变得更加困难,因为即使攻击者窃取了 token (通过 XSS)它也会在用户转到下一页时过期。但另一方面,这种方法使 webapp 的可用性降低。这是来自 security.stackexchange.com 的一段很好的引述:

For example if they hit the 'back' button and submit the form with new values, the submission will fail, and likely greet them with some hostile error message. If they try to open a resource in a second tab, they'll find the session randomly breaks in one or both tabs

分析 Node.js 时 Express框架(基于 Connect )我注意到每个请求都会生成一个新的 CSRF token ,但旧的不会失效

我的问题是:为每个请求提供新的 CSRF token 而不是使旧的无效的原因是什么?为什么不只为每个 session 生成一个 token ?

谢谢你,对不起我的英语!

最佳答案

CSRF token 是随机数。它们应该只使用一次(或长时间后安全使用)。它们用于识别和授权请求。让我们考虑两种防止 CSRF 的方法:

  1. 每个 session 固定一个 token :这样做的缺点是客户端可以将其 token 传递给其他人。这可能不是由于嗅探或中间人或某些安全漏洞造成的。这是用户的背叛。多个客户端可以使用相同的 token 。遗憾的是,对此无能为力。

  2. 动态 token :每当服务器和客户端之间发生任何交互或超时时, token 都会更新。它可以防止使用旧 token 和多个客户端同时使用。

动态 token 的缺点是它限制返回和从那里继续。在某些情况下,这可能是可取的,例如如果实现购物车,则必须重新加载以检查是否有货。 CSRF 将阻止重新发送已发送的表格或重复购买/出售。

细粒度的控制会更好。对于您提到的场景,您可以在没有 CSRF 验证的情况下进行。然后不要对该特定页面使用 CSRF。换句话说,处理每个路由的 CSRF(或其异常)。

更新

我只能想到单个动态 token 优于多个动态 token 的两个原因:

  1. 多个 token 确实更好,但至少有一个像上面那样的动态 token 。这意味着设计一个可能变得复杂的详细工作流程。例如看这里:

    1. https://developers.google.com/accounts/docs/OAuth2
    2. https://dev.twitter.com/docs/auth/implementing-sign-twitter
    3. https://developers.facebook.com/docs/facebook-login/access-tokens/

    这些是访问其 API(表单提交等)的 token ,而不仅仅是登录。每个人都以不同的方式实现它们。除非有好的用例,否则不值得做。您的网页将大量使用它。更何况表单提交现在还不简单。

  2. 动态单 token 是最简单的,并且在库中很容易获得。因此可以随时随地使用。

多代币的优点:

  1. 可以执行事务。您可以在请求之间进行排序。
  2. 可以从超时和身份验证错误中回退(您现在必须处理它们)。
  3. 安全!比单个 token 更强大。可以检测 token 滥用,黑名单用户。

顺便说一下,如果你想使用多个 token ,你现在有 OAuth2 库。

关于node.js - 为什么 Express/Connect 会在每次请求时生成新的 CSRF token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21645504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com