Начнем, эй, я снова вернулся! В своих предыдущих сообщениях я писал на темы Создание многоразового модального компонента в React и Магия промежуточного программного обеспечения: получение URL-адресов изображений с помощью Multer и Cloudinary в Node.js. Сегодня я рад поговорить об ограничении скорости запросов, отправляемых на экспресс-сервер. Мы обсудим, что такое ограничение скорости, зачем нужно ограничение скорости, и реализацию ограничения скорости с помощью экспресс-промежуточного программного обеспечения. Итак, без промедления приступим!

Если вы не знакомы с экспресс промежуточным программным обеспечением, ознакомьтесь с моим предыдущим блогом здесь.

Что такое ограничение скорости?

Ограничение скорости — это метод, используемый в веб-приложениях для предотвращения злоупотреблений или чрезмерного использования службы. Он ограничивает количество запросов, которые клиент может сделать к серверу в течение определенного периода времени.

Зачем ограничивать скорость?

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

Реализация

Чтобы проиллюстрировать, как ограничение скорости может быть реализовано в приложении Express.js, мы будем использовать простой пример входа в систему, который обрабатывает запросы аутентификации. Добавив промежуточное ПО ограничения скорости к маршруту входа в систему, мы можем ограничить количество запросов на вход, которые клиент может сделать за определенный период времени. Это помогает предотвратить атаки грубой силы и другие вредоносные действия, которые могут быть нацелены на конечные точки аутентификации. На этом примере мы можем продемонстрировать, как использовать промежуточное ПО для ограничения скорости в Express.js и повысить безопасность наших веб-приложений.

сначала установите следующие зависимости для вашего приложения узла

npm i express rate-limiter-flexible

В корневом каталоге экспресс-приложения создайте папку src, в которой создайте файл rateLimiter.js.

Код создает промежуточную функцию ограничителя скорости, которая использует пакет rate-limiter-flexible. Он устанавливает экземпляр RateLimiterMemory с ограничением в 5 запросов за 120 секунд.

Функция limiter проверяет, не превысил ли входящий запрос лимит, установленный ограничителем скорости. Если нет, ПО промежуточного слоя вызывает функцию next() для передачи запроса следующей функции ПО промежуточного слоя.

Если предел превышен, функция устанавливает заголовок Retry-After и заголовок X-RateLimit-Reset, чтобы сообщить клиенту, когда он может повторить попытку. Затем он возвращает код состояния 429 с сообщением об ошибке, указывающим, что было сделано слишком много запросов, и клиент должен повторить попытку позже.

app.js

Этот код является примером базовой конечной точки входа в Express.js с добавленным к ней промежуточным ПО limiter.

Конечная точка /login определяется промежуточным программным обеспечением limiter в качестве параметра, который обеспечивает применение ограничения скорости на этой конечной точке.

username и password пользователя извлекаются из тела запроса, а затем в массиве users ищется пользователь с совпадающим username. Если пользователь не найден, возвращается ошибка.

Если пользователь найден, пароль проверяется на совпадение. Если не совпадает, возвращается ошибка. Если он совпадает, возвращается сообщение об успешном выполнении с пользовательским объектом.

Если предел, установленный в промежуточном программном обеспечении rateLimiter, превышен, функция limiter обработает запрос, отправив ответ с кодом состояния 429 «Слишком много запросов» и сообщение «слишком много запросов, повторите попытку позже». Ответ также будет включать два заголовка:

  • Retry-After: время в секундах, по истечении которого клиент может повторить запрос
  • X-RateLimit-Reset: дата и время, когда лимит будет сброшен и клиент сможет делать больше запросов

Таким образом, если лимит превышен, клиенту нужно будет подождать указанное время, прежде чем повторить запрос к конечной точке /login.

заключение

В заключение, ограничение скорости является важной мерой безопасности для предотвращения злоупотреблений и обеспечения доступности веб-приложений. Реализация ограничения скорости с помощью промежуточного программного обеспечения, такого как rate-limiter-flexible, в приложении Express.js может помочь предотвратить DDoS-атаки, атаки методом подбора и другие вредоносные действия.

Я надеюсь, что этот пост в блоге был информативным и полезным. Спасибо за чтение, и я вернусь в следующее воскресенье с другим захватывающим топи! Следите за обновлениями