保护 express js 服务器免受暴力破解

Posted

技术标签:

【中文标题】保护 express js 服务器免受暴力破解【英文标题】:Protecting express js server from brute force 【发布时间】:2015-12-16 15:58:09 【问题描述】:

我正在使用 nodejs 和 express 编写一个 api,我的应用程序由 openshift 免费计划托管。 我想保护我的路线免受蛮力攻击。例如,如果一个 IP 每秒发送超过 5 个请求,则将其阻止 5 分钟。 :)

【问题讨论】:

这被称为“速率限制”,有很多文章和一些以前的 *** 帖子都写过它。我建议你从已经写好的开始。这是一个:What's a good rate limiting algorithm. @jfriend00 谢谢你的名字,我正在寻找它+从头开始写东西非常酷:) 这是Leaky Bucket Algorithm 的一个很好的参考,这是一种用于速率限制的常用算法。 【参考方案1】:

最好限制反向代理、负载均衡器或任何其他 node.js 应用程序入口点的速率。

但是,有时它不符合要求。

rate-limiter-flexible 包有你需要的阻止选项

const  RateLimiterMemory  = require('rate-limiter-flexible');

const opts = 
  points: 5, // 5 points
  duration: 1, // Per second
  blockDuration: 300, // block for 5 minutes if more than points consumed 
;

const rateLimiter = new RateLimiterMemory(opts);

const rateLimiterMiddleware = (req, res, next) => 
  // Consume 1 point for each request
  rateLimiter.consume(req.connection.remoteAddress)
    .then(() => 
      next();
    )
    .catch((rejRes) => 
      res.status(429).send('Too Many Requests');
    );
;

app.use(rateLimiterMiddleware);

您可以为任何确切的路由配置rate-limiter-flexible。见official express docs about using middlwares

还有集群或分布式应用程序以及许多其他有用的选项

【讨论】:

【参考方案2】:

如果您使用的是Express 框架,那么 NPM 上有几个专用于此的包:

express-rate-limiter express-limiter express-brute

这些可用于限制 ip,也可用于其他信息(例如,通过用户名来尝试登录失败)。

【讨论】:

【参考方案3】:

没有什么可以阻止您直接在 Node.js/express 中实现这一点,但这种事情通常(而且几乎可以肯定更容易)通过使用 nginx 或 Apache httpd 之类的东西来处理您的流量应用程序。

这有一个额外的好处是允许您完全以非特权用户身份运行应用程序,因为 nginx(或其他)将绑定到端口 80 和 443(需要管理/超级用户/任何权限)而不是您的应用程序。此外,您还可以轻松获得许多其他理想功能,例如静态内容缓存。

nginx 有a module specifically for this:

ngx_http_limit_req_module 模块 (0.7.21) 用于限制每个已定义键的请求处理速率,特别是来自单个 IP 地址的请求的处理速率。

【讨论】:

感谢您的回复。但我想我没有明白你的意思。我正在使用 nodejs,不想使用另一个网络服务器 :) 使用 nginx 作为节点的反向代理是标准做法。

以上是关于保护 express js 服务器免受暴力破解的主要内容,如果未能解决你的问题,请参考以下文章

使用kali Hydra暴力破解phpadmin网站(失败)

关于zip包的一点小东西 暴力 字典 明文

暴力破解原理与过程详解

BurpSuite 暴力破解之绕过 token

暴力清除pdf保护密码 & 卸载干净VMware

Linux 利用hosts.deny 防止暴力破解ssh