Zarządzanie sekretami i zmiennymi środowiskowymi
Rozróżnią Państwo zmienne środowiskowe po stronie serwera i klienta, zapobiegną wyciekowi sekretów do bundli oraz użyją wstrzykiwania w czasie działania.
Zarządzanie sekretami i zmiennymi środowiskowymi to bezpłatna lekcja React Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.
Dwie klasy zmiennych środowiskowych
W aplikacji React zmienne środowiskowe dzielą się na dwie klasy: serwerowe (nigdy nie są wysyłane do przeglądarki) i klienckie (są osadzane w bundlu JavaScript). Zrozumienie, do której klasy należą zmienne, to pierwszy krok w zarządzaniu sekretami, ponieważ zmienne klienckie stają się w praktyce publiczne po wdrożeniu bundla.
Konwencja prefiksu Vite
W projektach Vite w bundlu klienckim są uwzględniane tylko zmienne z prefiksem VITE_. VITE_PUBLIC_API_URL=https://api.example.com jest dostępna w kodzie przeglądarki za pośrednictwem import.meta.env.VITE_PUBLIC_API_URL. Wszystkie pozostałe zmienne są usuwane z bundla podczas budowania i pozostają dostępne wyłącznie po stronie serwera.
Konwencja prefiksu Next.js
W Next.js prefiks NEXT_PUBLIC_ udostępnia zmienną kodowi JavaScript uruchamianemu w przeglądarce. NEXT_PUBLIC_ANALYTICS_ID=UA-123 jest osadzana w bundlu klienckim. Zmienne bez tego prefiksu (takie jak DATABASE_URL) są dostępne wyłącznie w kodzie po stronie serwera (Server Components, API routes, Server Actions) i nigdy nie są wysyłane do przeglądarki.
Ryzyko przypadkowego ujawnienia
Zmienna bez prefiksu nadal może zostać ujawniona, jeśli zostanie przypadkowo zserializowana. Na przykład gdy Server Component przekaże cały obiekt konfiguracji jako props do Client Component, a konfiguracja będzie zawierać DATABASE_URL, sekret pojawi się w kodzie HTML wysłanym do przeglądarki. Ostrożne przekazywanie propsów i audyt serializacji zapobiegają temu problemowi.
Tego nigdy nie umieszczaj w kodzie klienckim
W bundlu klienckim nigdy nie mogą znaleźć się: ciągi połączeń z bazą danych i hasła, tajne klucze API usług zewnętrznych (Stripe secret key, OpenAI API key), prywatne klucze RSA/EC, sekrety podpisywania JWT oraz tokeny uwierzytelniające usług wewnętrznych. Jeśli coś z tych danych jest potrzebne do wywołania API, należy przekierować to wywołanie przez endpoint serwerowy.
Wzorzec Backend for Frontend
Wzorzec Backend for Frontend (BFF) umieszcza cienką warstwę serwerową między aplikacją React a wrażliwymi usługami zewnętrznymi. Klient wywołuje /api/stripe/charge, serwer BFF dołącza tajny klucz Stripe i wywołuje API Stripe, a następnie BFF zwraca tylko niezbędne dane odpowiedzi. Sekrety na stałe pozostają na serwerze.
dotenv-vault i zarządzane przechowywanie sekretów
dotenv-vault szyfruje plik .env i umożliwia jego bezpieczne udostępnianie oraz wdrażanie w różnych środowiskach bez zapisywania jawnych sekretów w systemie kontroli wersji. Produkcyjne alternatywy obejmują HashiCorp Vault (dla przedsiębiorstw), AWS Parameter Store (SSM) i GCP Secret Manager — wszystkie zapewniają pobieranie sekretów za pośrednictwem API w czasie działania, a nie podczas budowania.
Sekrety w potokach CI/CD
Platformy CI/CD (GitHub Actions, GitLab CI) zapewniają szyfrowane przechowywanie sekretów dostępnych jako zmienne środowiskowe podczas budowania. Sekrety należy przechowywać w GitHub Secrets i odwoływać się do nich w workflow za pomocą ${{ secrets.STRIPE_SECRET_KEY }}. Sekrety są maskowane w logach i nigdy nie są dołączane do zbudowanego artefaktu.
Pliki konfiguracji zależne od środowiska
Next.js i Vite obsługują wiele plików .env: .env (wszystkie środowiska), .env.local (lokalne nadpisania, ignorowany przez git), .env.development i .env.production. Plik lokalny nadpisuje wartości ze współdzielonego pliku, umożliwiając konfigurację właściwą dla danego dewelopera bez wpływu na inne środowiska.
Audyt bundli pod kątem sekretów
Po zbudowaniu aplikacji należy sprawdzić bundle JavaScript pod kątem przypadkowo ujawnionych sekretów. Można uruchomić grep -r "password|secret|api_key" dist/ lub użyć dedykowanego narzędzia, takiego jak analiza strings na zbudowanych plikach. Niektóre sekrety, jeśli zostaną przypadkowo dołączone, można łatwo rozpoznać po formacie (UUID, ciągi base64 lub prefiksy kluczy, takie jak sk_live_).
Zasada minimalnego ujawniania
Każde środowisko i każda usługa powinny mieć dostęp wyłącznie do sekretów, których potrzebują. Klient React nie potrzebuje żadnych sekretów — powinien otrzymywać tylko publiczne identyfikatory. Serwer BFF potrzebuje wyłącznie sekretów wymaganych przez wywoływane przez niego API. Środowiska deweloperskie powinny używać nieprodukcyjnych kluczy API z ograniczonymi uprawnieniami i limitami wydatków.
Prefiks NEXT_PUBLIC_
Co dzieje się ze zmienną środowiskową Next.js mającą prefiks NEXT_PUBLIC_?
Podsumowanie lekcji
Vite używa VITE_, a Next.js używa NEXT_PUBLIC_, aby udostępniać zmienne w bundlu przeglądarki. Wszystkie pozostałe zmienne są dostępne wyłącznie po stronie serwera. Nigdy nie należy umieszczać w kodzie klienckim haseł do baz danych, tajnych kluczy API ani sekretów podpisywania JWT. Wzorzec BFF umożliwia przekierowywanie wrażliwych wywołań API przez serwer. Do zarządzania sekretami w środowisku produkcyjnym należy używać dotenv-vault, AWS Parameter Store lub GitHub Secrets. Zbudowane bundle należy sprawdzać pod kątem przypadkowo ujawnionych sekretów.
Często zadawane pytania
Czy lekcja „Zarządzanie sekretami i zmiennymi środowiskowymi” jest bezpłatna?
Tak — pełny tekst „Zarządzanie sekretami i zmiennymi środowiskowymi” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Zarządzanie sekretami i zmiennymi środowiskowymi”?
Rozróżnią Państwo zmienne środowiskowe po stronie serwera i klienta, zapobiegną wyciekowi sekretów do bundli oraz użyją wstrzykiwania w czasie działania. Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć React Academy?
Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Zarządzanie sekretami i zmiennymi środowiskowymi”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?
Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- XSS w React: dangerouslySetInnerHTML i skrypty zewnętrzne
- Ochrona przed CSRF w konfiguracjach React i API
- Content Security Policy dla aplikacji React
- Zarządzanie sekretami i zmiennymi środowiskowymi