限制用户在任何给定时间内的请求数量[Nodejs]

时间:2018-02-10 20:52:25

标签: javascript node.js express middleware restful-authentication

我正在使用Nodejs和Express构建服务器端应用程序,出于某种原因,我正在考虑如何在固定的时间内限制用户的请求数量,以防止黑客发送垃圾邮件并尝试分解服务器

我有点担心人们滥用/发送大量请求的垃圾邮件。

所以有任何关于如何构建快速中间件的想法,允许我根据他的 access_token 来控制特定用户发送的请求数量



问题

1)如何构建这个中间件以及最好的方法是什么?

2)是否有任何模块可以完成这项工作?

3)是否有任何其他解决方案或结构允许我保护我的服务器免受此类攻击?

欢迎所有建议。

2 个答案:

答案 0 :(得分:1)

那里有一堆现有的模块,但这似乎是你正在寻找的:

https://www.npmjs.com/package/tokenthrottle

在Node社区中,几乎总有一个模块可以完成您正在寻找的全部或部分内容。你几乎不需要重新发明轮子。

答案 1 :(得分:0)

只需在保持计数器运行的Map中收集请求ips / any。当计数器点击某个时只显示一个错误页面:

const app = Express();

const ips = new Map; 
const limit = 20;

app.use((req, res, next) => {
  const count = ips.get(req.ip) || 0;
  if(count < 20){
    ips.set(req.ip, count + 1);
    next();
  } else {
   res.end("spam filter activated, sorry :(");
  }
});

// ... your endpoints

app.listen(80);

在您重新启动服务器之前,这将阻止某些ips。但是,您也可以按特定间隔重置地图:

setInterval(() => ips.clear(), 60 * 60 * 1000);