Guides

Hvad er miljøvariabler og secrets? En enkel guide

En miljøvariabel er en navngivet indstilling, fx DATABASE_URL eller STRIPE_SECRET_KEY, som gives til din app, når den kører, i stedet for at være skrevet ind i koden. Et secret er en miljøvariabel, hvis værdi skal holdes privat: en API-nøgle, et kodeord eller en signeringsnøgle. Når disse værdier ligger uden for koden, kan du skifte dem uden at redigere appen, bruge forskellige nøgler til test og til rigtige kunder, og forhindre at de lækker, når du deler eller publicerer din kode.

Hvorfor det betyder noget, når du bygger med AI

Så snart din app gør noget nyttigt sammen med en anden tjeneste, fx tager betaling, sender e-mails eller kalder en AI-model, har den brug for en nøgle. AI-app-builders beder jævnligt om disse nøgler, og det, der afgør om appen er sikker, er, hvor nøglen havner.

Der går to ting ofte galt i AI-byggede apps:

  • Nøglen indsættes i chatten eller koden. Den ligger så i chathistorikken, projektfilerne og alle eksporter eller repositories. Den, der ser den, kan bruge din konto.
  • Nøglen bruges i browseren. Hvis koden, der kalder Stripe eller OpenAI, kører på siden, sendes nøglen til alle besøgende. Folk kigger, og automatiske scannere leder efter eksponerede nøgler hele tiden.

Når du forstår miljøvariabler, kan du opdage begge dele og bede om rettelsen.

En hverdagsanalogi: hotelsafen

Din apps kode er som hotelværelset. Gæster (og rengøringspersonale, og alle du giver et nøglekort) går igennem det. Du ville ikke lade dit pas ligge på skrivebordet.

Miljøvariabler er værelsets safe. Værelset ved, at der findes en safe, og hvordan den åbnes, når det er nødvendigt, men passet ligger ikke fremme. Og flytter du fra et værelse til et andet, fra din testopsætning til dit live-site, lægger du et andet pas i den safe, uden at skulle indrette værelset om.

Sådan virker det

Din kode refererer til et navn, ikke til en værdi. I JavaScript på en server ser det ud som process.env.STRIPE_SECRET_KEY. Når appen starter, udfylder platformen, den kører på, værdien for dette navn. Ændrer du værdien i platformens indstillinger og genstarter eller deployer igen, bruger appen den nye, uden kodeændring.

Hvor værdierne kommer fra, afhænger af hvor appen kører:

Hvor den kørerHvor værdierne gemmes
På en udviklers computerEn lokal fil, normalt kaldet .env, som aldrig må committes til git
I en AI-builders previewProjektets secrets- eller indstillingspanel
På en hostingplatformPlatformens indstillinger for miljøvariabler
I GitHub Actions eller anden automatiseringTjenestens egen krypterede secrets-lager

Offentlige og hemmelige variabler

Ikke alle miljøvariabler er hemmelige. Det hjælper at sortere dem i to grupper:

TypeEksemplerKan browseren se den?
Offentlig konfigurationSitenavn, offentligt analytics-ID, Stripes publishable nøgle, funktionskontakterJa, det er fint
SecretsStripes secret nøgle, OpenAI- eller Anthropic-API-nøgle, databaseforbindelsesstreng, nøgle til e-mailudbyder, signeringsnøgle til webhooksAldrig

Webframeworks gør denne opdeling tydelig. I Vite medtages kun variabler, hvis navn starter med VITE_, i browserkoden; i Next.js er præfikset NEXT_PUBLIC_. Det er en sikkerhedsfunktion: alt med disse præfikser ender i de filer, hver besøgende downloader, så et secret må aldrig få et af dem.

Et eksempel: en AI-knap til opsummering

Du vil have en knap "Opsummer denne note", der kalder en AI-model.

Den usikre version: knappens kode kører i browseren og kalder AI-udbyderen direkte, med API-nøglen skrevet ind i koden. Det virker i preview. Men det betyder også, at hvem som helst kan åbne browserens udviklerværktøjer, kopiere nøglen og køre en regning op på din konto.

Den sikre version:

  1. Du opretter nøglen hos AI-udbyderen og gemmer den som et secret, fx OPENAI_API_KEY (eller lignende), i dine projektindstillinger.
  2. Backenden får en rute, POST /api/summarise, der læser process.env.OPENAI_API_KEY, kontrollerer at brugeren er logget ind, og kalder udbyderen.
  3. Knappen kalder din rute, ikke udbyderen. Browseren ser aldrig nøglen.
  4. Du tilføjer det samme secret til den publicerede apps indstillinger og deployer igen, så det live site også har det.

Mønsteret, hvor browseren kalder din server, og din server holder nøglen og kalder tjenesten, gælder for betalinger, e-mail, kort og alle andre betalte API'er. Guiden til brug af LLM-API'er dækker AI-tilfældet mere grundigt.

Vigtige begreber

  • .env-fil: en tekstfil med linjer på formen NAVN=værdi, brugt i lokal udvikling. Føj den til .gitignore, så den ikke committes.
  • .env.example: en kopi med navnene, men uden rigtige værdier, som committes, så andre ved, hvilke variabler de skal sætte.
  • Roter: erstat et secret med et nyt og tilbagekald det gamle.
  • Scope / rettigheder: mange udbydere lader dig oprette nøgler, der kun kan visse ting. En nøgle, der kun kan sende e-mail, er mindre farlig end en, der kan alt.
  • Test- vs. live-nøgler: udbydere som Stripe giver separate nøgler til test og til rigtige penge. Brug testnøgler, indtil du lancerer.
  • Signeringsnøgle: et secret, der bruges til at kontrollere, at en besked, fx en webhook, virkelig kom fra afsenderen.

Almindelige fejl og misforståelser

  • "Mit repository er privat, så nøgler i det er fine." Private repositories deles, forkes, eksporteres og klones til bærbare computere. Nøgler hører stadig ikke hjemme der. Hvis du forbinder et projekt til GitHub, så tjek at ingen .env-fil er med.
  • "Jeg slettede den, så den er væk." Git gemmer historikken, og chatlogs gemmer beskederne. Hvis en nøgle nogensinde er blevet eksponeret, skal den roteres.
  • At bruge et offentligt præfiks på et secret. VITE_OPENAI_KEY lægger din nøgle i browser-bundlen.
  • At glemme at deploye igen. Ændrer du en variabel i indstillingerne, træder den normalt først i kraft, når appen genstartes eller publiceres igen.
  • Én nøgle til alt. Separate nøgler til test og live, og per app, gør det muligt at tilbagekalde én uden at ødelægge resten.
  • Ingen forbrugsgrænse. For betalte API'er bør du sætte et budget eller en grænse i udbyderens dashboard, hvis en nøgle skulle lække.

Hvad du kan bede din AI-builder om

  • "Læs Stripes secret key fra en miljøvariabel, der hedder STRIPE_SECRET_KEY. Brug den kun på serveren."
  • "Sørg for, at intet secret bruges i klientkode, og at det ikke får præfikset VITE_ / NEXT_PUBLIC_."
  • "Opret en .env.example, der lister alle variabler appen har brug for, uden værdier, og sørg for at .env er git-ignoreret."
  • "Tjek de byggede frontend-filer for strenge, der ligner API-nøgler."

Vores sikkerhedstjekliste for AI-byggede apps dækker secrets sammen med de andre tjek, der er værd at køre før lancering.

Secrets på Mythex

På Mythex er secrets projektets miljøvariabler, og de indsættes både i preview-sandkassen og i din publicerede app. Du tilføjer dem under projektindstillinger → Secrets eller med /secrets i chatten, og når agenten har brug for en nøgle, viser den et secrets-kort i chatten, så værdien går ind i et formularfelt og ikke i beskedhistorikken. Ændrer du et secret til en live-app, så publicér igen, så deployet henter det. Projekteksporter udelader secrets, og importerede .env-filer renses, så du tilføjer dem igen i indstillingerne. Se miljøvariabler og secrets og secrets i chat i dokumentationen.

Spørgsmål

Hvad er en miljøvariabel?

En miljøvariabel er en navngivet indstilling, fx STRIPE_SECRET_KEY eller DATABASE_URL, som gives til et program, når det kører, i stedet for at være skrevet ind i koden. Den samme kode kan dermed bruge forskellige værdier i udvikling og i produktion.

Hvad er forskellen på en miljøvariabel og et secret?

Et secret er en miljøvariabel, hvis værdi skal holdes privat, fx en API-nøgle, et databasekodeord eller en signeringsnøgle til webhooks. Andre miljøvariabler, fx et sitenavn eller en funktionskontakt, kan godt være offentlige.

Er det sikkert at lægge API-nøgler i min frontend?

Nej. Al frontend-kode downloades til hver besøgendes browser, og den kan læses. Hemmelige nøgler må kun bruges på serveren. Browseren skal kalde din server, som så kalder udbyderen.

Hvad skal jeg gøre, hvis min API-nøgle lækker?

Tilbagekald eller roter nøglen hos udbyderen med det samme, opret en ny, opdater den de steder, din app gemmer secrets, og deploy igen. Det er ikke nok at slette nøglen fra koden eller chathistorikken, for der kan allerede findes kopier.

Mythex · Pricing · Byg hvad som helst med AI · Skabeloner til websites og apps · Mythex sammenlignet · Ordliste for app-bygning med AI · Gratis værktøjer til app-bygning med AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)