【问题标题】:Limiting the number of request by user in any given hour [Nodejs]限制用户在任何给定小时内的请求数量 [Nodejs]
【发布时间】:2018-07-21 09:10:03
【问题描述】:

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

我有点担心人们滥用/发送大量请求的可用服务。

那么有没有关于如何构建一个快速中间件的想法,它允许我根据他的 access_token 控制特定用户发送的请求数量



问题是

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

2) 有没有可以完成这项工作的模块?

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

欢迎所有建议。

【问题讨论】:

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


【解决方案1】:

只需在保持计数器运行的 Map 中收集请求 ips/任何内容。当计数器达到某个时,只显示一个错误页面:

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);

这将阻止某些 ip,直到您重新启动服务器。但是,您也可以按一定的时间间隔重置地图:

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

【讨论】:

  • 您的解决方案还不错,实际上我更喜欢使用 access_token 而不是 IP 地址,因为您知道任何人都可以轻松更改他的 IP 地址...无论如何您的方法可能很有用...
  • @BenFarhat 您可以明确地将req.ip 更改为其他内容,例如req.body.access_token 或其他
【解决方案2】:

那里有很多现有的模块,但这似乎是您正在寻找的:

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

在 Node 社区中,几乎总是有一个模块可以完成您正在寻找的全部或部分工作。您几乎不必重新发明轮子。

【讨论】:

    猜你喜欢
    • 2012-12-31
    • 2019-04-22
    • 2018-01-02
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 2018-05-03
    相关资源
    最近更新 更多