Hantering av hemligheter och miljövariabler
Skilj mellan server- och klientbaserade miljövariabler, förhindra att hemligheter läcker in i bundles och använd injicering vid körning.
Hantering av hemligheter och miljövariabler är en gratis lektion i React Academy på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för React Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i React Academy innehåller totalt 4 lektioner.
Två klasser av miljövariabler
I en React-applikation tillhör miljövariabler två klasser: variabler på serversidan (skickas aldrig till webbläsaren) och variabler på klientsidan (bäddas in i JavaScript-bundlen). Att förstå vilken klass dina variabler tillhör är det första steget i hanteringen av hemligheter, eftersom variabler på klientsidan i praktiken är offentliga när bundlen har driftsatts.
Vite-prefixkonventionen
I Vite-projekt inkluderas endast variabler med prefixet VITE_ i klientbundlen. VITE_PUBLIC_API_URL=https://api.example.com är åtkomlig i webbläsarkod via import.meta.env.VITE_PUBLIC_API_URL. Alla andra variabler tas bort från bundlen under byggsteget och förblir begränsade till serversidan.
Next.js-prefixkonventionen
I Next.js exponerar prefixet NEXT_PUBLIC_ en variabel för JavaScript i webbläsaren. NEXT_PUBLIC_ANALYTICS_ID=UA-123 bäddas in i klientbundlen. Variabler utan prefixet (som DATABASE_URL) är endast åtkomliga i kod på serversidan (Server Components, API routes och Server Actions) och skickas aldrig till webbläsaren.
Risken för oavsiktlig exponering
En variabel utan prefix är fortfarande åtkomlig om den av misstag serialiseras. Om en Server Component till exempel skickar hela sitt konfigurationsobjekt som en prop till en Client Component och konfigurationen innehåller DATABASE_URL, visas hemligheten i HTML-koden som skickas till webbläsaren. Noggrann prop-drilling och granskning av serialiseringen förhindrar detta.
Placera aldrig dessa i klientkod
Följande får aldrig förekomma i klientbundlen: databasanslutningssträngar och lösenord, hemliga API-nycklar från tredje part (Stripe secret key, OpenAI API key), privata RSA/EC-nycklar, JWT-signeringshemligheter och interna autentiseringstoken för tjänster. Om något av detta behövs för ett API-anrop ska du vidarebefordra anropet via en server-slutpunkt.
Backend for Frontend-mönstret
Mönstret Backend for Frontend (BFF) placerar ett tunt serverlager mellan React-applikationen och känsliga externa tjänster. Klienten anropar /api/stripe/charge, BFF-servern lägger till Stripe secret key och anropar Stripe API, och BFF returnerar endast nödvändiga svarsdata. Hemligheterna stannar permanent på servern.
dotenv-vault och hanterad lagring av hemligheter
dotenv-vault krypterar din .env-fil och möjliggör säker delning och driftsättning mellan miljöer utan att klartexthemligheter läggs in i versionshanteringen. Alternativ för produktion är bland annat HashiCorp Vault (enterprise), AWS Parameter Store (SSM) och GCP Secret Manager – alla erbjuder API-baserad hämtning av hemligheter under körning i stället för vid byggsteget.
Hemligheter i CI/CD-pipelines
CI/CD-plattformar (GitHub Actions, GitLab CI) erbjuder krypterad lagring av hemligheter som är åtkomlig som miljövariabler under byggen. Lagra hemligheter i GitHub Secrets och referera till dem i arbetsflöden som ${{ secrets.STRIPE_SECRET_KEY }}. Hemligheter maskeras i loggar och inkluderas aldrig i den byggda artefakten.
Miljöspecifika konfigurationsfiler
Next.js och Vite stöder flera .env-filer: .env (alla miljöer), .env.local (lokala åsidosättningar, undantas från Git), .env.development och .env.production. Den lokala filen åsidosätter värden från den gemensamma filen, vilket möjliggör utvecklarspecifik konfiguration utan att påverka andra miljöer.
Granska bundlar efter hemligheter
Efter bygget granskar du JavaScript-bundlen efter oavsiktligt exponerade hemligheter. Kör grep -r "password|secret|api_key" dist/ eller använd ett särskilt verktyg som strings för att analysera de byggda filerna. Vissa hemligheter som råkat inkluderas kan tydligt identifieras genom sitt format (UUID:er, base64-strängar eller nyckelprefix som sk_live_).
Principen om minsta exponering
Varje miljö och varje tjänst bör endast ha tillgång till de hemligheter den behöver. React-klienten behöver inga hemligheter alls – den bör endast ta emot offentliga identifierare. BFF-servern behöver bara de hemligheter som krävs för de API:er den anropar. Utvecklingsmiljöer bör använda API-nycklar för icke-produktion med begränsade behörigheter och utgiftstak.
NEXT_PUBLIC_-prefixet
Vad händer med en Next.js-miljövariabel som har prefixet NEXT_PUBLIC_?
Lektionssammanfattning
Vite använder VITE_ och Next.js använder NEXT_PUBLIC_ för att exponera variabler för webbläsarens bundle. Alla andra variabler är endast tillgängliga på serversidan. Inkludera aldrig databaslösenord, hemliga API-nycklar eller JWT-signeringshemligheter i klientkod. Använd BFF-mönstret för att vidarebefordra känsliga API-anrop. Använd dotenv-vault, AWS Parameter Store eller GitHub Secrets för hantering av produktionshemligheter. Granska byggda bundlar efter oavsiktligt exponerade hemligheter.
Lär dig React med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 88
- Lektioner
- 324
Vanliga frågor
Är lektionen ”Hantering av hemligheter och miljövariabler” gratis?
Ja – hela texten till ”Hantering av hemligheter och miljövariabler” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i React Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i React Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Hantering av hemligheter och miljövariabler”?
Skilj mellan server- och klientbaserade miljövariabler, förhindra att hemligheter läcker in i bundles och använd injicering vid körning. Ni övar på React Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig React Academy?
Du behöver inga förkunskaper. Utbildningen i React Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Hantering av hemligheter och miljövariabler”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här React Academy-lektionen?
Ja. Varje React Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- XSS i React: dangerouslySetInnerHTML och tredjepartsskript
- CSRF-skydd i React- och API-konfigurationer
- Content Security Policy för React-appar
- Hantering av hemligheter och miljövariabler