Дайджесты новостей
Плакатная журнальная векторная графика с защитным щитом Nuxt и Nitropack, блокирующим утечки серверных данных и недоверенные хосты.

Nuxt v4.6.4: срочный релиз безопасности, проверка хостов и новые правила кэширования Nitro

Если в твоём стеке крутятся проекты на популярном мета-фреймворке 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-маршруты:

  1. Запрет кэширования приватных ответов: движок Nitro больше никогда не кэширует ответы, содержащие заголовок установки кук (Set-Cookie) либо директивы Cache-Control: private / no-store. Это устраняет опаснейшую уязвимость межпользовательской утечки сессий, когда сессионный токен одного пользователя кэшировался сервером и отдавался остальным посетителям страницы.
  2. Ограничение методов кэширования: кэширование через routeRules теперь строго ограничено безопасными идемпотентными методами GET и HEAD. Попытки кэшировать мутирующие запросы POST или DELETE блокируются.
  3. Безопасная обработка закодированных слэшей: правила маршрутизации теперь корректно декодируют символ %2F. Ранее хитрый запрос к /api%2Fadmin мог обойти правило защиты /api/**, поскольку матчер путей воспринимал закодированный слэш как обычный текст. Теперь маска надёжно защищает вложенные эндпоинты при любом кодировании разделителей.

Для безопасного обновления проекта достаточно выполнить команду пакетного менеджера:

# Обновление ядра фреймворка и серверного движка
pnpm up nuxt@4.6.4 nitropack@2.13.6

Своевременный апдейт убережёт твой прод от утечек данных, а локальное окружение — от неприятных сюрпризов при отладке.