Если в твоём стеке крутятся проекты на популярном мета-фреймворке Nuxt (экосистема Vue.js), самое время заглянуть в терминал и обновить зависимости. Команда фреймворка выкатила экстренный сервисный релиз v4.6.4 в тандеме с обновлением серверного движка Nitropack версии 2.13.6.
Формально это минорный патч, но по факту — критический бюллетень безопасности: суммарно закрыто 11 уязвимостей (8 непосредственно в ядре Nuxt и 3 в движке Nitro). Помимо исправления дыр, разработчики ужесточили целый ряд дефолтных настроек рантайма, которые могут напрямую сломать локальную разработку или схемы кэширования роутов, если не знать о них заранее.
Изоляция серверных ошибок и защита dev-серверов
Первое фундаментальное изменение касается механизма санитизации ошибок серверного рендеринга (Error Sanitization). Исторически, когда в процессе SSR падало необработанное исключение, Nuxt послушно упаковывал объект ошибки в клиентский payload для отображения на странице сбоя. В продакшене это регулярно приводило к катастрофическим утечкам: клиентам улетали стектрейсы, пути файлов на сервере, куски SQL-запросов и фрагменты переменных окружения.
В Nuxt v4.6.4 введена строгая изоляция:
- На клиент теперь отдаются исключительно поля
messageиdataтех ошибок, которые были созданы разработчиком явно через вызовcreateError(). - Любые другие системные сбои и непредвиденные исключения сторонних библиотек принудительно очищаются от контекста, отдавая клиенту сухой статус 500 без внутренних серверных подробностей.
Второе изменение нацелено на защиту dev-серверов от атак перепривязки DNS (DNS Rebinding). Ранее инструмент Vite уже блокировал запросы с недоверенным заголовком Host, чтобы чужие сайты через браузер инженера не могли выполнять произвольный код на локальном localhost:3000. Теперь аналогичная проверка распространена на сборщики Webpack и Rspack:
- Запросы с заголовком
Host, отличным отlocalhostили127.0.0.1, по умолчанию блокируются со статусом 403. - Если ты проксируешь локальный сервер через туннели (ngrok, Cloudflare Tunnel) для мобильного тестирования, тебе обязательно нужно прописать доверенные домены в
nuxt.config.ts:
export default defineNuxtConfig({
devServer: {
allowedHosts: [
"localhost",
".ngrok-free.app",
".trycloudflare.com",
"dev.company.local"
]
}
});
Ужесточение кэширования Nitro и безопасные слэши
Вторая половина правок затронула серверный движок Nitropack 2.13.6, отвечающий за генерацию страниц и API-маршруты:
- Запрет кэширования приватных ответов: движок Nitro больше никогда не кэширует ответы, содержащие заголовок установки кук (
Set-Cookie) либо директивыCache-Control: private/no-store. Это устраняет опаснейшую уязвимость межпользовательской утечки сессий, когда сессионный токен одного пользователя кэшировался сервером и отдавался остальным посетителям страницы. - Ограничение методов кэширования: кэширование через
routeRulesтеперь строго ограничено безопасными идемпотентными методамиGETиHEAD. Попытки кэшировать мутирующие запросыPOSTилиDELETEблокируются. - Безопасная обработка закодированных слэшей: правила маршрутизации теперь корректно декодируют символ
%2F. Ранее хитрый запрос к/api%2Fadminмог обойти правило защиты/api/**, поскольку матчер путей воспринимал закодированный слэш как обычный текст. Теперь маска надёжно защищает вложенные эндпоинты при любом кодировании разделителей.
Для безопасного обновления проекта достаточно выполнить команду пакетного менеджера:
# Обновление ядра фреймворка и серверного движка
pnpm up nuxt@4.6.4 nitropack@2.13.6
Своевременный апдейт убережёт твой прод от утечек данных, а локальное окружение — от неприятных сюрпризов при отладке.
