Я совершил три дорогостоящие ошибки в аутентификации с Next.js 16

Я напортачил с матчером proxy.ts в трех разных проектах.

Самое худшее? Никаких ошибок. Никаких предупреждений. Никаких логов. Все выглядело идеально, пока не обнаружились дыры в безопасности.

В Next.js 16 middleware.ts изменился на proxy.ts. Это не просто смена названия. Это фундаментальный сдвиг в том, как вы обрабатываете запросы.

Вот что вам нужно знать, чтобы не сломать аутентификацию.

Новые правила Middleware вызывал путаницу. Разработчики использовали его для вызовов базы данных и тяжелой логики. Это не его задача.

Прокси находится на границе сети. Он перехватывает запросы до того, как они достигнут ваших роутов.

Тихий сбой Если вы обновите Next.js, не используя codemod, ваш старый файл middleware.ts может остаться в проекте. Он пройдет проверки TypeScript. Он успешно скомпилируется.

Но он ничего не будет делать.

Ваши редиректы не сработают. Аутентификация не запустится. Ваше приложение просто молча обойдет слой безопасности.

Проверьте эти три вещи вручную:

Ловушка матчера Большинство настроек аутентификации ломаются в конфигурации матчера. Если вы не исключите статические файлы, прокси будет запускаться для каждого CSS и JS файла. Это создает бесконечные циклы редиректов для ассетов.

Используйте negative lookahead, чтобы исключить:

Внимание: не доверяйте только заголовкам Именно на этом я погорел.

Прокси устанавливает такие заголовки, как x-user-id, в запросе. Ваши Server Components читают их через headers().

Если в вашем матчере есть пробел, пользователь может отправить свой собственный заголовок x-user-id. Server Component не сможет отличить заголовок, установленный прокси, от заголовка, отправленного клиентом.

Злоумышленник может подменить ID пользователя на маршруте, не попавшем под действие матчера. Он может не увидеть данные, но сможет получить права доступа, которых у него быть не должно.

Решение: Прокси — это ваши быстрые ворота. Он берет на себя основную нагрузку на edge.

Но вы должны повторно проверить JWT внутри ваших Server Components.

Избыточность — это безопасность.

Источник: https://dev.to/shubhradev/i-got-the-proxyts-matcher-wrong-for-three-projects-before-i-understood-why-4e5c