Ame*_*avi 0 api brute-force node.js express
我正在使用nodejs和express编写api,我的应用程序由openshift免费计划托管.我想保护我的路线免受蛮力.例如,如果IP发送超过5个请求/秒,则将其阻止5分钟.:)
没有什么可以阻止你直接在Node.js/express中实现它,但是通过使用像nginxApache 这样的东西httpd来处理你应用程序的流量,这种事情通常(并且几乎肯定更容易)处理.
这有一个额外的好处,允许您完全作为非特权用户运行应用程序,因为nginx(或其他)将绑定到端口80和443(这需要管理/超级用户/任何权限)而不是您的应用程序.此外,您还可以轻松获得一系列其他理想的功能,例如缓存静态内容.
nginx有一个专门用于此的模块:
ngx_http_limit_req_module模块(0.7.21)用于限制每个定义密钥的请求处理速率,特别是来自单个IP地址的请求的处理速率.
最好限制反向代理、负载均衡器或 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);
Run Code Online (Sandbox Code Playgroud)
您可以配置rate-limiter-flexible任何确切的路由。请参阅有关使用中间件的官方快速文档
还有用于集群或分布式应用程序的选项以及许多其他有用的选项
| 归档时间: |
|
| 查看次数: |
3869 次 |
| 最近记录: |