Sådan holder du API-nøgler sikre i din app
For at holde API-nøgler sikre skal du gemme dem som hemmeligheder eller miljøvariabler på din hosting, bruge dem kun i kode på serveren, og aldrig indsætte dem i chat, kodefiler, skærmbilleder eller et Git-repository. Giv hver nøgle den mindste rettighed, den har brug for, sæt forbrugsgrænser hos udbyderen, og hvis en nøgle nogensinde lækker, så roter den — opret en ny og slet den gamle — i stedet for bare at skjule det sted, hvor den dukkede op.
En API-nøgle er en adgangskode til en tjeneste. Din OpenAI-nøgle lader nogen bruge dine penge på AI; din hemmelige Stripe-nøgle lader nogen udstede refusioner; din nøgle til e-mailudbyderen lader nogen sende post i dit navn. AI-appbyggere er gode til at koble disse til, men er ikke altid omhyggelige med, hvor de ender, så denne guide dækker, hvordan du holder dem sikre, og hvordan du tjekker det.
Offentlige nøgler vs. hemmelige nøgler
Ikke alle nøgler er hemmelige. At kende forskellen forhindrer dig i at gå i panik over den forkerte og ignorere den rigtige.
| Type | Eksempler | Må den være i browseren? |
|---|---|---|
| Publicerbare / offentlige nøgler | Stripes pk_…-nøgle, en kortnøgle begrænset til dit domæne, nogle analyse-ID'er | Ja — designet til det |
| Hemmelige nøgler | Stripes sk_…, OpenAI- og Anthropic-nøgler, nøgler til e-mailudbydere, databaseadgangskoder | Aldrig |
| Service-/adminnøgler | Nøgler, der omgår adgangsregler i en hostet database | Aldrig — behandl dem som de mest følsomme |
Hvis du er i tvivl om, hvilken type en nøgle er, så tjek udbyderens dokumentation. Når du er i tvivl, så behandl den som hemmelig.
Trin 1: Gem nøgler som hemmeligheder, ikke i koden
Nøgler hører hjemme i din hostings miljøvariabler eller hemmelighedsindstillinger. Din kode læser dem på navn under kørsel (for eksempel process.env.OPENAI_API_KEY), så værdien aldrig optræder i dine filer. Baggrunden findes i hvad miljøvariabler og hemmeligheder er.
Flyt hver API-nøgle ud af koden og ind i miljøvariabler. Lav en liste over hver nøgle, du fandt, i hvilken fil den var, og hvilket variabelnavn du brugte. Vis mig ikke værdierne.
Tjek derefter, at intet er tilbage:
Søg hele projektet, inklusive konfigurationsfiler og eventuelle .env-filer, efter alt der ligner en API-nøgle eller adgangskode. Rapportér fil og linje, ikke værdien.
Trin 2: Brug hemmelige nøgler kun på serveren
Dette er reglen, der betyder mest. Alt, browseren modtager, kan en besøgende læse — sidekilden og JavaScript-filerne er synlige i udviklerværktøjerne.
Hvis appen skal kalde OpenAI, så skal browseren altså kalde din server, og din server kalder OpenAI med nøglen. Nøglen forlader aldrig serveren.
Chatfunktionen kalder OpenAI direkte fra browseren. Flyt det kald til en API-route på serveren, som læser OPENAI_API_KEY fra miljøet. Browseren må kun kalde vores route. Kræv login for routen.
Vær opmærksom på en almindelig fælde i frontend-frameworks: variabler med et offentligt præfiks — VITE_ i Vite, NEXT_PUBLIC_ i Next.js — bygges bevidst ind i browserkoden. En hemmelig nøgle med et af disse præfikser er eksponeret, selvom den står "i en miljøvariabel".
Trin 3: Test at intet lækker
Antag ikke, at det virkede — tjek den live side:
- Åbn den publicerede app i en browser.
- Åbn udviklerværktøjerne og fanen Sources eller Network.
- Søg på tværs af filerne efter de første tegn i hver hemmelig nøgle (for eksempel
sk_ellersk-). - Tjek de netværkskald, appen laver. Et kald, der går direkte fra browseren til en betalt AI-udbyder, er et advarselstegn.
Hvis du finder en hemmelig nøgle, så flyt den til serveren (trin 2) og roter den (trin 6), for den var allerede offentlig.
Trin 4: Begræns hvad hver nøgle kan
Mange udbydere lader dig begrænse en nøgle:
- Afgrænsede eller begrænsede nøgler, der kun kan gøre det, din app har brug for. Stripe understøtter for eksempel begrænsede nøgler med bestemte rettigheder.
- Domæne- eller IP-begrænsninger for nøgler, der skal være offentlige, såsom kortnøgler.
- Separate nøgler pr. app og pr. miljø, så én lækage ikke eksponerer alt, og tilbagekaldelse af én ikke ødelægger de andre.
- Testnøgler under bygning, og live-nøgler kun i den publicerede app.
Trin 5: Sæt et loft over skaden
Selv en godt beskyttet nøgle kan misbruges gennem din egen app — for eksempel at nogen scripter din AI-funktion tusindvis af gange.
- Sæt forbrugsgrænser eller alarmer hos hver betalt udbyder.
- Kræv login for enhver funktion, der koster penge pr. kald.
- Tilføj en grænse pr. bruger. Se hvad hastighedsbegrænsning er.
Tilføj en grænse på 30 AI-forespørgsler pr. bruger i timen til /api/chat. Returnér en tydelig besked, når grænsen er nået. Afvis forespørgsler fra brugere, der ikke er logget ind.
Trin 6: Roter nøgler, der lækker
Hvis en hemmelig nøgle dukker op et sted, den ikke skulle — en chatbesked, en commit, et skærmbillede, en supportsag, browserkode — så antag at den er kompromitteret.
- Opret en ny nøgle hos udbyderen.
- Opdater hemmeligheden i din apps indstillinger.
- Deploy eller publicér igen, så den live app bruger den nye nøgle.
- Slet den gamle nøgle hos udbyderen.
- Tjek udbyderens brugslogs for aktivitet, du ikke genkender.
Det er ikke nok at slette chatbeskeden eller Git-commit'en. Git-historikken gemmer gamle versioner, og alt offentligt kan allerede være kopieret.
Almindelige fejl
- At indsætte en nøgle i prompten. Den er nu i chathistorikken. Brug en hemmelighedsformular i stedet.
- Et offentligt præfiks på en hemmelig variabel.
VITE_OPENAI_API_KEYsender nøglen til hver besøgende. - At committe en
.env-fil. Sørg for, at den står i.gitignore, før den første push. - Én nøgle overalt. Brug separate nøgler til test og live, og for hver app.
- Ingen forbrugsgrænse. En lækket eller misbrugt nøgle uden loft kan køre en stor regning op, før du bemærker det.
- At skjule i stedet for at rotere. Når en nøgle først er eksponeret, er det kun en ny nøgle, der løser problemet.
- Nøgler på skærmbilleder. Beskær eller slør indstillingssider, før du deler dem for at få hjælp.
Tjekliste
- Hver nøgle er gemt som en hemmelighed eller miljøvariabel, ikke i koden.
- Ingen .env-fil eller nøgle er committet til Git.
- Hemmelige nøgler bruges kun i kode på serveren.
- Ingen hemmelig variabel bruger et offentligt præfiks som
VITE_ellerNEXT_PUBLIC_. - Jeg har søgt i den live sides JavaScript efter hvert nøglepræfiks og fundet intet.
- Nøgler er afgrænset eller begrænset, hvor udbyderen tillader det.
- Test- og live-nøgler er adskilt.
- Betalte funktioner kræver login og har grænser pr. bruger.
- Hver betalt udbyder har et forbrugsloft eller en alarm.
- Jeg ved, hvordan hver nøgle roteres, og enhver nøgle, der nogensinde er eksponeret, er roteret.
Sådan holder du nøgler sikre på Mythex
Mythex holder nøgler ude af din kode og chat på to måder:
- Kort med anmodning om hemmelighed. Når agenten har brug for en nøgle, viser den et kort i chatten, hvor du indtaster værdien i formularfelter, ikke i beskedfeltet, og den gemmes som en projekthemmelighed. Se Hemmeligheder i chat.
- Projektindstillinger → Secrets, eller
/secretsi chatten, for at tilføje eller ændre nøgler selv. Se Miljøvariabler og hemmeligheder.
Efter at du har ændret en hemmelighed for en publiceret app, skal du publicere igen, så den live app henter den. Eksporterede projekter udelader hemmeligheder, så tilføj dem igen, hvor du næste gang kører koden. Hvis en nøgle nogensinde dukker op i chatten, så roter den hos udbyderen.
Til resten af sikkerhedsgennemgangen før lancering, arbejd dig igennem sikkerhedstjeklisten for AI-byggede apps. Hvis du tilføjer AI-funktioner, dækker sådan bruger du LLM API'er nøgler og omkostninger mere grundigt.
Spørgsmål
Er det sikkert at putte en API-nøgle i frontend-kode?
Kun hvis udbyderen har designet nøglen til at være offentlig, for eksempel Stripes publicerbare nøgle eller en kortnøgle begrænset til dit domæne. Enhver nøgle, der kan bruge penge eller læse private data, skal blive på serveren, for alt, der sendes til browseren, kan læses af alle.
Hvad skal jeg gøre, hvis jeg har indsat en API-nøgle i en chat eller et offentligt repo?
Roter den: opret en ny nøgle hos udbyderen, opdater din apps hemmeligheder, publicér igen, og slet derefter den gamle nøgle. Det er ikke nok at slette beskeden eller commit'en, for kopier kan allerede findes.
Hvor skal API-nøgler gemmes?
I din hostings miljøvariabler eller hemmelighedsindstillinger, som læses af kode på serversiden under kørsel. De må ikke skrives ind i kildefiler, committes til Git eller være med på skærmbilleder.
Hvordan kan jeg se, om min API-nøgle er eksponeret på min hjemmeside?
Åbn din live-side, se sidens kildekode og JavaScript-filerne i browserens udviklerværktøjer, og søg efter begyndelsen af nøglen. Hvis den dukker op, er den eksponeret og skal flyttes til serveren og roteres.