Множество обращений за короткое время Express на Nodejs - PullRequest
0 голосов
/ 01 мая 2020

Доступ за короткий промежуток времени очень велик.

Что должен сделать Express?

Я хочу запретить непрерывный доступ.

Многочисленные обращения за короткое время

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

На высоком уровне вам потребуется поддерживать словарный кэш времени последнего доступа (или X времени последнего доступа) для каждого IP-адреса или идентификатора пользователя.

Тогда вам понадобится функция-оболочка для каждой страницы запросить обновление времени последнего доступа и проверить, не превышают ли они пределы использования. Либо возвращая HTTP 429 - Too Many Requests, либо вызывая функцию loda sh _.throttle() или _.debounce().

Однако, поскольку вы не первый, кто столкнулся с такой проблемой, оказывается, что для этого есть заранее написанная библиотека plug-and-play:

0 голосов
/ 01 мая 2020

Ваше требование известно как ограничение скорости . Это может быть очень сложно реализовать или очень просто. У меня был хороший успех с использованием express -rate-limit . Это express промежуточное ПО, предлагающее простые ограничения.

Примерно так ограничивает каждый IP-адрес до 100 запросов в минуту.

const RateLimit = require( 'express-rate-limit' )
var limiter = new RateLimit(
  {
    windowMs: 1000 * 60,
    max: 100,
    headers: true,
    onLimitReached: function( req, res, options ) {
      console.log( 'Request rate limited for requests from ', req.ip )
    }
  } )
app.use( limiter )

Но это слишком просто для коммерческой установки, где вы продаете доступ к вашему API, и дайте премиум-клиентам более высокий лимит. Это, как я уже говорил, сложно настроить.

...