Уязвимость, связанная с медленной публикацией (RU пока мертв) - Express.js - ограничение скорости передачи данных Решение?

Я пытаюсь решить проблему уязвимости, связанной с медленной публикацией в моем приложении.

Проблема: https://blog.qualys.com/securitylabs/2011/07/07/identifying-slow-http-attack-vulnerabilities-on-web-applications

Чтобы ограничить количество подключений от пользователя, я использовал express-rate-limit, чтобы приложение не оставалось недоступным.

const rateLimit = require('express-rate-limit')

const limiter = rateLimit({   windowMs: 60 * 1000, // 1 minute   max: 100 // limit each IP to 100 requests per windowMs })

app.use(limiter)

Но если я попытаюсь протестировать свое приложение с помощью slowtesttool и запустить тест с 2 подключениями (со скоростью 1 подключение в секунду и последующие данные каждые 10 секунд), я вижу, что подключения никогда не закрываются.


Я установил тайм-аут для подключения, как показано ниже, но похоже, что это не работает!

app.use((req, res, next) => {
  req.connection.setTimeout(30000, () => {
    req.socket.end()
  })
  next()
})

Есть ли способ ограничить скорость приема данных, то есть указать максимальное время, в течение которого я могу ждать каждого следующего фрагмента тела?

1 ответ

Одним из решений может быть использование возможностей вашего переднего веб-сервера (я предполагаю, что вы разместите свое приложение за сервером, таким как nginx, apapche, caddy, ...).

Это встроено в Nginx и caddy, возможно, и в других тоже.

Другие вопросы по тегам