【问题标题】:How to secure Koa.js application against CSRF attacks?如何保护 Koa.js 应用程序免受 CSRF 攻击?
【发布时间】:2021-01-18 08:37:22
【问题描述】:

我知道Cross-Site Request Forgery (CSRF) 是一种攻击,它会迫使用户在他们已经登录的某些 Web 应用程序中执行无意的操作。

我想阻止 CSRF 调用基于 Koa.js 的 API 和表单提交。这是一个基于 JWT 的应用程序。

通常框架具有防止或保护 CSRF 的插件。但是,当您使用Koa.js 时,如何防止此类 CSRF 攻击呢? Koa 中是否有 middlewares 这样做?

【问题讨论】:

  • 也许这个项目能帮上忙:github.com/koajs/csrf
  • @jackmis 谢谢。我已经浏览了上面链接中提到的细节,但是我现在有几个问题。 1. 是否需要设置会话密钥? 2. 是否需要设置会话支持? 3、对于第一次API调用(如登录),用户在接下来的调用中如何获取CSRF令牌与服务器共享?因此,一个例子可能会有所帮助
  • 另外,github 链接中给出的示例仅讨论了基于表单的请求,但如何实现 API?
  • 我正在尝试在基于 JWT 的应用程序中实现这一点
  • 我不熟悉那个项目和 node.js。众所周知,为了防止 CSRF,我们必须生成一个攻击者无法预测的参数(令牌),然后使用该参数提交请求,并通过验证参数来验证请求。对于您的问题,我猜:1)不(我猜 koa-csrf 有自己的方式来管理它); 2) 是(以便 koa-csrf 可以验证令牌); 3)我在 Koajs 项目中发现了这个:github.com/koajs/examples/blob/master/csrf/app.js

标签: javascript csrf middleware koa koa2


【解决方案1】:

自己写一个中间件其实很简单(有时间我这里举个例子)。基本上流程如下:

生成一个令牌并将其保存在会话中 (https://www.npmjs.com/package/koa-session) 并将该令牌作为隐藏字段放置在表单中。提交表单时,检查隐藏字段中发布的令牌是否与会话中保存的令牌相同。请务必在每个请求中重新生成一个新令牌。

需要注意的重要一点是,会话令牌必须保存在服务器端或在客户端加密,否则将毫无意义。在这种情况下,使用签名 JWT 令牌的 Simlpy 将不起作用。如果要使用 JWT 令牌,则必须实现 redis 或其他东西来保存 (JWT-token:csrf-token) 的键值对。

【讨论】:

    猜你喜欢
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 2017-02-07
    • 2018-09-08
    • 2016-01-06
    • 1970-01-01
    相关资源
    最近更新 更多