Hva er miljøvariabler og hemmeligheter? En enkel forklaring
En miljøvariabel er en navngitt innstilling, som DATABASE_URL eller STRIPE_SECRET_KEY, som gis til appen din når den kjører, i stedet for å være skrevet inn i koden. En hemmelighet er en miljøvariabel der verdien må holdes privat: en API-nøkkel, et passord eller en signeringsnøkkel. Når du holder disse verdiene utenfor koden, kan du endre dem uten å redigere appen, bruke ulike verdier til testing og for ekte kunder, og unngå at de lekker når du deler eller publiserer koden.
Hvorfor det betyr noe når du bygger med AI
Når appen gjør noe nyttig sammen med en annen tjeneste, for eksempel tar imot betaling, sender e-post eller kaller en AI-modell, trenger den en nøkkel. AI-appbyggere ber om disse nøklene jevnlig, og hvor nøkkelen havner avgjør om appen er trygg.
To ting går ofte galt i AI-bygde apper:
- Nøkkelen limes inn i chatten eller koden. Den havner da i chatloggen, prosjektfilene og alle eksporter eller repositorier. Alle som ser den, kan bruke kontoen din.
- Nøkkelen brukes i nettleseren. Hvis koden som kaller Stripe eller OpenAI kjører på siden, sendes nøkkelen til alle besøkende. Folk ser etter dette, og automatiske skannere leter etter eksponerte nøkler hele tiden.
Når du forstår miljøvariabler, kan du oppdage begge deler og be om rettelsen.
En hverdagslig sammenligning: hotellsafen
Appens kode er som hotellrommet. Gjester (og renholdere, og alle du gir nøkkelkort) går gjennom det. Du ville ikke lagt passet ditt på skrivebordet.
Miljøvariabler er safen på rommet. Rommet vet at det finnes en safe og hvordan den åpnes når det trengs, men passet ligger ikke fremme. Og hvis du flytter til et annet rom, fra testoppsettet til den ekte nettsiden, legger du et annet pass i safen til det rommet, uten å pusse opp.
Slik fungerer det
Koden din peker på et navn, ikke en verdi. I JavaScript på en server ser det ut slik: process.env.STRIPE_SECRET_KEY. Når appen starter, fyller plattformen den kjører på inn verdien for dette navnet. Endrer du verdien i plattformens innstillinger og starter på nytt eller publiserer på nytt, bruker appen den nye verdien, uten kodeendringer.
Hvor verdiene kommer fra, avhenger av hvor appen kjører:
| Hvor den kjører | Hvor verdiene lagres |
|---|---|
| På en utviklers PC | En lokal fil, vanligvis kalt .env, som aldri må committes til git |
| I en AI-byggers forhåndsvisning | Prosjektets panel for hemmeligheter eller innstillinger |
| På en hostingplattform | Plattformens innstillinger for miljøvariabler |
| I GitHub Actions eller annen automatisering | Tjenestens egen krypterte hemmelighetslagring |
Offentlige og hemmelige variabler
Ikke alle miljøvariabler er hemmelige. Det hjelper å dele dem i to grupper:
| Type | Eksempler | Kan nettleseren se den? |
|---|---|---|
| Offentlig konfigurasjon | Navn på nettstedet, offentlig analyse-ID, Stripes publiserbare nøkkel, funksjonsbrytere | Ja, det er greit |
| Hemmeligheter | Stripes hemmelige nøkkel, API-nøkkel for OpenAI eller Anthropic, databasetilkoblingsstreng, nøkkel for e-posttjeneste, signeringsnøkkel for webhooks | Aldri |
Webrammeverk gjør denne delingen tydelig. I Vite er det bare variabler som starter med VITE_ som tas med i kode for nettleseren. I Next.js er prefikset NEXT_PUBLIC_. Dette er en sikkerhetsfunksjon: alt med disse prefiksene havner i filene alle besøkende laster ned, så en hemmelighet må aldri få et slikt prefiks.
Et konkret eksempel: en AI-oppsummeringsknapp
Du vil ha en knapp «Oppsummer dette notatet» som kaller en AI-modell.
Den utrygge versjonen: knappens kode, som kjører i nettleseren, kaller AI-leverandøren direkte med API-nøkkelen skrevet inn i koden. Det fungerer i forhåndsvisningen. Men det betyr at hvem som helst kan åpne nettleserens utviklerverktøy, kopiere nøkkelen og bruke opp regningen på kontoen din.
Den trygge versjonen:
- Du lager nøkkelen hos AI-leverandøren og lagrer den som en hemmelighet med navnet
OPENAI_API_KEY(eller lignende) i prosjektinnstillingene. - Backend får en rute,
POST /api/summarise, som leserprocess.env.OPENAI_API_KEY, sjekker at brukeren er innlogget, og kaller leverandøren. - Knappen kaller din rute, ikke leverandøren. Nettleseren ser aldri nøkkelen.
- Du legger til samme hemmelighet i innstillingene for den publiserte appen og publiserer på nytt, slik at den live nettsiden også har den.
Dette mønsteret, der nettleseren kaller serveren din og serveren holder nøkkelen og kaller tjenesten, gjelder for betaling, e-post, kart og alle andre betalte API-er. Guiden til bruk av LLM-API-er dekker AI-tilfellet mer grundig.
Viktige begreper
.env-fil: en tekstfil med linjer på formenNAVN=verdi, brukt i lokal utvikling. Legg den i.gitignoreslik at den ikke committes..env.example: en kopi med navnene, men uten ekte verdier, som committes slik at andre vet hvilke variabler de må sette.- Rotere: erstatte en hemmelighet med en ny og trekke tilbake den gamle.
- Omfang / rettigheter: mange leverandører lar deg lage nøkler som bare kan gjøre bestemte ting. En nøkkel som bare kan sende e-post, er mindre farlig enn en som kan alt.
- Test- vs. live-nøkler: leverandører som Stripe gir deg separate nøkler for testing og for ekte penger. Bruk testnøkler til du lanserer.
- Signeringshemmelighet: en hemmelighet som brukes for å sjekke at en melding, for eksempel en webhook, virkelig kommer fra avsenderen.
Vanlige feil og misforståelser
- «Repositoriet mitt er privat, så nøkler i det er greit.» Private repositorier deles, forkes, eksporteres og klones til PC-er. Nøkler hører likevel ikke hjemme der. Hvis du kobler prosjektet til GitHub, sjekk at ingen
.env-fil er med. - «Jeg slettet den, så den er borte.» Git beholder historikken, og chatloggene beholder meldingene. Hvis en nøkkel noen gang har blitt eksponert, roter den.
- Bruke et offentlig prefiks på en hemmelighet.
VITE_OPENAI_KEYlegger nøkkelen din i kodepakken for nettleseren. - Glemme å publisere på nytt. Endrer du en variabel i innstillingene, virker det vanligvis først etter at appen har startet på nytt eller er publisert på nytt.
- Én nøkkel til alt. Egne nøkler for test og live, og per app, gjør det mulig å trekke tilbake én uten å ødelegge resten.
- Ingen forbruksgrense. For betalte API-er, sett et budsjett eller en grense i leverandørens dashbord i tilfelle en nøkkel lekker.
Hva du bør be AI-byggeren din om
- «Les Stripe-hemmeligheten fra en miljøvariabel som heter
STRIPE_SECRET_KEY. Bruk den bare på serveren.» - «Sørg for at ingen hemmelighet brukes i kode på klientsiden, eller får et
VITE_- ellerNEXT_PUBLIC_-prefiks.» - «Lag en
.env.examplesom lister opp alle variablene appen trenger, uten verdier, og sørg for at.enver ignorert av git.» - «Sjekk de bygde frontend-filene for strenger som ser ut som API-nøkler.»
Vår sjekkliste for sikkerhet i AI-bygde apper dekker hemmeligheter sammen med de andre kontrollene som er verdt å kjøre før lansering.
Hemmeligheter på Mythex
På Mythex er hemmeligheter prosjektets miljøvariabler, som settes inn både i forhåndsvisningen og i den publiserte appen. Du legger dem til under prosjektinnstillinger → Secrets eller med /secrets i chatten. Når agenten trenger en nøkkel, viser den et kort for hemmeligheter i chatten, slik at verdien havner i et felt og ikke i meldingsloggen. Endrer du en hemmelighet for en live-app, publiser på nytt slik at deployen plukker den opp. Prosjekteksporter utelater hemmeligheter, og importerte .env-filer fjernes, så du må legge dem til igjen i innstillingene. Se miljøvariabler og hemmeligheter og hemmeligheter i chat i dokumentasjonen.
Spørsmål
Hva er en miljøvariabel?
En miljøvariabel er en navngitt innstilling, for eksempel STRIPE_SECRET_KEY eller DATABASE_URL, som gis til et program når det kjører, i stedet for å være skrevet inn i koden. Den samme koden kan dermed bruke ulike verdier i utvikling og produksjon.
Hva er forskjellen på en miljøvariabel og en hemmelighet?
En hemmelighet er en miljøvariabel der verdien må holdes privat, for eksempel en API-nøkkel, et databasepassord eller en signeringsnøkkel for webhooks. Andre miljøvariabler, som navnet på nettstedet eller en funksjonsbryter, kan være offentlige.
Er det trygt å legge API-nøkler i frontend?
Nei. Alt i frontend-kode lastes ned til alle besøkendes nettleser og kan leses. Hemmelige nøkler må bare brukes på serveren, og nettleseren bør kalle serveren din, som deretter kaller leverandøren.
Hva bør jeg gjøre hvis API-nøkkelen min lekker?
Trekk den tilbake eller roter den hos leverandøren med en gang, lag en ny, oppdater den der appen din lagrer hemmeligheter, og publiser på nytt. Å slette nøkkelen fra koden eller chatloggen er ikke nok, fordi kopier kan allerede finnes.