HashDoS в Node.js: как один странный ввод может заморозить event loop
HashDoS выглядит академично, но для серверного JavaScript это практичная проблема: event loop один, а тяжелый ввод может остановить все.
HashDoS — это атака на хеш-таблицы. Если подобрать много значений, которые попадают в одни и те же бакеты, операция, которая обычно быстрая, становится резко дорогой. В браузере это может зависить вкладку. На сервере с Node.js последствия неприятнее: event loop общий для всех запросов.
Почему это важно для Node.js
Node.js часто выбирают за простоту: один процесс, async I/O, быстрый старт. Но у этой модели есть цена. Если CPU занят тяжелой синхронной работой, остальные запросы ждут.
HashDoS как раз опасен тем, что может выглядеть как обычный HTTP-запрос с неприятным набором данных. Не обязательно ломать авторизацию или получать доступ к серверу. Иногда достаточно заставить runtime делать слишком много работы.
Что может сделать обычный разработчик
Не все исправляется в приложении: часть проблемы должна решаться на уровне runtime. Но вокруг можно поставить защиту:
- лимиты размера тела запроса;
- лимиты количества параметров;
- таймауты на reverse proxy;
- rate limit на подозрительные endpoint'ы;
- отдельные worker-процессы для тяжелых задач.
Почему обновления важны
Такие уязвимости редко выглядят как "украли пароль". Из-за этого их иногда недооценивают. Но отказ в обслуживании для маленького VPS может быть таким же критичным: сайт лег, AdSense не видит страницы, поисковик получает ошибки.
Вывод
Если Node.js стоит на сервере, обновления безопасности — это не формальность. Особенно для event-loop runtime, где один плохой запрос может ударить по всем пользователям.
Источники: Node.js March 2026 security releases, HashDoS write-up.