Как использовать «лимитер» в node.js - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь внедрить какой-то механизм защиты от спама в мое приложение.Я наткнулся на пакет ограничителей .

. Я запутался после прочтения их примера:

var RateLimiter = require('limiter').RateLimiter;
var limiter = new RateLimiter(150, 'hour', true);  // fire CB immediately

// Immediately send 429 header to client when rate limiting is in effect
limiter.removeTokens(1, function(err, remainingRequests) {
  if (remainingRequests < 1) {
    response.writeHead(429, {'Content-Type': 'text/plain;charset=UTF-8'});
    response.end('429 Too Many Requests - your IP is being rate limited');
  } else {
    callMyMessageSendingFunction(...);
  }
});

Где определяется «ответ»?Разве нам не нужно подключать ограничитель к пути с помощью app.use ()?Откуда лимитер узнает входящий IP в противном случае?

1 Ответ

0 голосов
/ 22 мая 2018

Я пробовал этот пакет несколько дней назад.Этот пакет используется для записи количества запросов за определенный период времени.Неважно, откуда приходит запрос.Таким образом, этот пакет не заботится о том, что является входящим IP-адресом.

Это правда, что нам нужно добавить код в приложение middleware для ограничения всего приложения или route middleware для указанного маршрута.Тогда вы можете получить объект response .Ниже приводится простое использование.

var express = require('express')
var app = express()

app.use(function (req, response, next) {
  limiter.removeTokens(1, function(err, remainingRequests) {
      if (remainingRequests < 1) {
        response.writeHead(429, {'Content-Type': 'text/plain;charset=UTF-8'});
        response.end('429 Too Many Requests - your IP is being rate limited');
      } else {
        next();
      }
    });
})

Если вы хотите отслеживать указанные IP-адреса.Я бы порекомендовал express-rate-limit и express-limiter .

...