Назад к статьям

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. Но вокруг можно поставить защиту:

Почему обновления важны

Такие уязвимости редко выглядят как "украли пароль". Из-за этого их иногда недооценивают. Но отказ в обслуживании для маленького VPS может быть таким же критичным: сайт лег, AdSense не видит страницы, поисковик получает ошибки.

Вывод

Если Node.js стоит на сервере, обновления безопасности — это не формальность. Особенно для event-loop runtime, где один плохой запрос может ударить по всем пользователям.

Источники: Node.js March 2026 security releases, HashDoS write-up.