Управление секретами и переменными окружения
Различайте переменные окружения на сервере и клиенте, предотвращайте утечку секретов в сборках и используйте внедрение во время выполнения
«Управление секретами и переменными окружения» — бесплатный урок React Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.
Два класса переменных окружения
В приложении React переменные окружения делятся на два класса: серверные (никогда не отправляются в браузер) и клиентские (встраиваются в пакет JavaScript). Понимание того, к какому классу относятся ваши переменные, — первый шаг в управлении секретами, поскольку клиентские переменные фактически становятся общедоступными после развертывания пакета.
Соглашение о префиксе в Vite
В проектах Vite в клиентскую сборку включаются только переменные с префиксом VITE_. VITE_PUBLIC_API_URL=https://api.example.com доступна в коде браузера через import.meta.env.VITE_PUBLIC_API_URL. Все остальные переменные удаляются из сборки во время сборки и остаются только на сервере.
Соглашение о префиксе в Next.js
В Next.js префикс NEXT_PUBLIC_ делает переменную доступной для JavaScript в браузере. NEXT_PUBLIC_ANALYTICS_ID=UA-123 встраивается в клиентскую сборку. Переменные без этого префикса (например, DATABASE_URL) доступны только в серверном коде (серверных компонентах, маршрутах API и серверных действиях) и никогда не отправляются в браузер.
Риск случайного раскрытия
Переменная без префикса всё равно может стать доступной, если ее случайно сериализовать. Например, если серверный компонент передает клиентскому компоненту весь объект конфигурации в качестве свойства и эта конфигурация включает DATABASE_URL, секрет окажется в HTML, отправленном в браузер. Тщательная передача параметров через компоненты и аудит сериализации предотвращают это.
Никогда не помещайте это в клиентский код
В клиентской сборке никогда не должны появляться: строки подключения к базам данных и пароли, секретные ключи сторонних API (секретный ключ Stripe, ключ API OpenAI), закрытые ключи RSA/EC, секреты подписи JWT и внутренние токены аутентификации служб. Если для вызова API требуется что-либо из этого, проксируйте вызов через серверную конечную точку.
Шаблон BFF для серверной части интерфейса
Шаблон серверной части для интерфейса (BFF) размещает тонкий серверный слой между приложением React и конфиденциальными внешними службами. Клиент вызывает /api/stripe/charge, сервер BFF добавляет секретный ключ Stripe и вызывает API Stripe, а BFF возвращает только необходимые данные ответа. Секреты навсегда остаются на сервере.
dotenv-vault и управляемое хранилище секретов
dotenv-vault шифрует ваш файл .env и позволяет безопасно делиться им и развертывать его в разных окружениях, не добавляя секреты в открытом виде в систему контроля версий. К производственным альтернативам относятся HashiCorp Vault (корпоративное решение), AWS Parameter Store (SSM) и GCP Secret Manager — все они получают секреты через API во время выполнения, а не во время сборки.
Секреты в конвейерах CI/CD
Платформы CI/CD (GitHub Actions, GitLab CI) предоставляют зашифрованное хранилище секретов, доступное в виде переменных окружения во время сборки. Храните секреты в GitHub Secrets и ссылайтесь на них в рабочих процессах как на ${{ secrets.STRIPE_SECRET_KEY }}. Секреты скрываются в журналах и никогда не включаются в собранный артефакт.
Файлы конфигурации для разных окружений
Next.js и Vite поддерживают несколько файлов .env: .env (все окружения), .env.local (локальные переопределения, игнорируется системой контроля версий), .env.development, .env.production. Локальный файл переопределяет значения из общего файла, позволяя настраивать приложение для конкретного разработчика, не затрагивая другие окружения.
Аудит сборок на наличие секретов
После сборки проверьте пакет JavaScript на наличие случайно раскрытых секретов. Выполните grep -r "password|secret|api_key" dist/ или используйте специальный инструмент, например анализ strings для собранных файлов. Некоторые секреты при случайном включении легко распознать по формату (UUID, строки base64 или префиксы ключей, такие как sk_live_).
Принцип минимального раскрытия
Каждое окружение и каждая служба должны иметь доступ только к необходимым им секретам. Клиенту React вообще не нужны секреты — он должен получать только общедоступные идентификаторы. Серверу BFF нужны лишь секреты, необходимые для вызываемых им API. В окружениях разработки следует использовать ключи API, не относящиеся к производственной среде, с ограниченными разрешениями и лимитами расходов.
Префикс NEXT_PUBLIC_
Что происходит с переменной окружения Next.js, имеющей префикс NEXT_PUBLIC_?
Итоги урока
Vite использует VITE_, а Next.js — NEXT_PUBLIC_, чтобы передавать переменные в пакет браузера. Все остальные переменные доступны только на сервере. Никогда не включайте пароли баз данных, секретные ключи API или секреты подписи JWT в клиентский код. Используйте шаблон BFF для проксирования конфиденциальных вызовов API. Для управления секретами в рабочей среде используйте dotenv-vault, AWS Parameter Store или GitHub Secrets. Проверяйте собранные пакеты на наличие случайно раскрытых секретов.
Изучай React с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 88
- Уроки
- 324
Часто задаваемые вопросы
Урок «Управление секретами и переменными окружения» бесплатный?
Да — полный текст урока «Управление секретами и переменными окружения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.
Чему я научусь в уроке «Управление секретами и переменными окружения»?
Различайте переменные окружения на сервере и клиенте, предотвращайте утечку секретов в сборках и используйте внедрение во время выполнения Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать React Academy?
Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Управление секретами и переменными окружения»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке React Academy?
Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- XSS в React: dangerouslySetInnerHTML и сторонние скрипты
- Защита от CSRF в React и настройках API
- Политика безопасности содержимого для приложений React
- Управление секретами и переменными окружения