Kako varno hraniti API ključe v svoji aplikaciji
Za varno hranjenje API ključev jih shranite kot skrivnosti ali okoljske spremenljivke na svojem gostitelju, uporabljajte jih samo v kodi na strežniku in jih nikoli ne prilepite v klepet, kodne datoteke, posnetke zaslona ali repozitorij Git. Vsakemu ključu dajte najmanj dovoljenj, ki jih potrebuje, nastavite omejitve porabe pri ponudniku, in če ključ kdaj pušča, ga zamenjajte – ustvarite novega in starega izbrišite – namesto da ga samo skrijete z mesta, kjer se je pojavil.
API ključ je geslo za storitev. Vaš ključ OpenAI lahko nekdo porabi za AI na vaš račun; vaš tajni ključ Stripe lahko izda povračila; ključ vašega ponudnika e-pošte lahko pošlje pošto v vašem imenu. Graditelji aplikacij z AI so dobri pri povezovanju teh ključev, vendar niso vedno pazljivi, kam končajo, zato ta vodnik pokaže, kako jih varovati in kako preveriti.
Javni in tajni ključi
Ni vsak ključ tajen. Če poznate razliko, ne panikarite zaradi napačnega in ne prezrite pravega.
| Vrsta | Primeri | Sme biti v brskalniku? |
|---|---|---|
| Javni ključi | Stripe pk_… ključ, ključ za zemljevide, omejen na vašo domeno, nekateri ID-ji analitike | Da – tako je zasnovano |
| Tajni ključi | Stripe sk_…, ključi OpenAI in Anthropic, ključi ponudnikov e-pošte, gesla za bazo | Nikoli |
| Servisni ali skrbniški ključi | Ključi, ki obidejo pravila dostopa v gostiteljski bazi | Nikoli – obravnavajte jih kot najobčutljivejše |
Če niste prepričani, kakšna vrsta ključa je, preverite dokumentacijo ponudnika. Ko dvomite, ga obravnavajte kot tajnega.
1. korak: shranite ključe kot skrivnosti, ne v kodo
Ključi sodijo v okoljske spremenljivke ali nastavitve skrivnosti vašega gostitelja. Koda jih prebere po imenu med izvajanjem (na primer process.env.OPENAI_API_KEY), tako da vrednost nikoli ne pride v vaše datoteke. Za ozadje glejte kaj so okoljske spremenljivke in skrivnosti.
Premakni vsak API ključ iz kode v okoljske spremenljivke. Naštej vsak ključ, ki si ga našel, v kateri datoteki je bil in katero ime spremenljivke si uporabil. Ne pokaži mi vrednosti.
Nato preverite, da ni ostal nobeden:
Preišči celoten projekt, vključno s konfiguracijskimi datotekami in morebitnimi datotekami .env, za vse, kar je videti kot API ključ ali geslo. Javi datoteko in vrstico, ne vrednosti.
2. korak: tajne ključe uporabljajte samo na strežniku
To pravilo je najpomembnejše. Vsakdo, ki obišče stran, lahko prebere vse, kar brskalnik prejme – izvorna koda strani in datoteke JavaScript so vidne v razvijalskih orodjih.
Če aplikacija potrebuje klic OpenAI, naj brskalnik kliče vaš strežnik, vaš strežnik pa OpenAI s ključem. Ključ nikoli ne zapusti strežnika.
Funkcija klepeta kliče OpenAI neposredno iz brskalnika. Premakni ta klic na strežniško pot API, ki prebere OPENAI_API_KEY iz okolja. Brskalnik naj kliče samo našo pot. Za pot zahtevaj prijavo.
Pazite na pogosto past v frontend ogrodjih: spremenljivke z javno predpono – VITE_ v Vite, NEXT_PUBLIC_ v Next.js – so namenoma vgrajene v kodo brskalnika. Tajni ključ s takšno predpono je izpostavljen, čeprav je „v okoljski spremenljivki“.
3. korak: preverite, da nič ne uhaja
Ne zaupajte, da je delovalo – preverite živo spletno mesto:
- Odprite objavljeno aplikacijo v brskalniku.
- Odprite razvijalska orodja, zavihek Sources ali Network.
- Iščite po datotekah prve znake vsakega tajnega ključa (na primer
sk_alisk-). - Preglejte omrežne zahteve, ki jih aplikacija pošilja. Zahteva, ki gre neposredno iz brskalnika k plačljivemu ponudniku AI, je rdeč opozorilni znak.
Če najdete tajni ključ, ga premaknite na strežnik (2. korak) in ga zamenjajte (6. korak), ker je bil že javen.
4. korak: omejite, kaj lahko vsak ključ naredi
Mnogi ponudniki omogočajo omejitev ključa:
- Omejeni ali obsegu prilagojeni ključi, ki lahko naredijo samo to, kar aplikacija potrebuje. Stripe na primer podpira omejene ključe s posebnimi dovoljenji.
- Omejitve domene ali IP-ja za ključe, ki morajo biti javni, na primer ključi za zemljevide.
- Ločeni ključi na aplikacijo in okolje, da en uhajajoč ključ ne izpostavi vsega in preklic enega ne pokvari drugih.
- Testni ključi med gradnjo in živi ključi samo v objavljeni aplikaciji.
5. korak: postavite strop škodi
Tudi dobro zaščiten ključ se lahko zlorabi prek vaše aplikacije – na primer, nekdo bi lahko skriptno tisočkrat klical vašo funkcijo z AI.
- Nastavite omejitve porabe ali opozorila pri vsakem plačljivem ponudniku.
- Za vsako funkcijo, ki stane denar na klic, zahtevajte prijavo.
- Dodajte omejitev hitrosti na uporabnika. Glejte kaj je omejevanje hitrosti.
Dodaj omejitev 30 zahtev z AI na uporabnika na uro za /api/chat. Ob doseženi omejitvi vrni jasno sporočilo. Zavrni zahteve uporabnikov, ki niso prijavljeni.
6. korak: zamenjajte ključe, ki uhajajo
Če se tajni ključ pojavi tam, kjer ne bi smel – v sporočilu klepeta, commitu, posnetku zaslona, podpornem zahtevku, kodi brskalnika – predpostavite, da je ogrožen.
- Ustvarite nov ključ pri ponudniku.
- Posodobite skrivnost v nastavitvah aplikacije.
- Ponovno objavite ali izvedite nov zagon, da živa aplikacija uporablja nov ključ.
- Izbrišite stari ključ pri ponudniku.
- Preverite dnevnike uporabe pri ponudniku za aktivnost, ki je ne prepoznate.
Brisanje sporočila v klepetu ali commita v Gitu ni dovolj. Zgodovina Gita hrani stare različice, vse javno pa je morda že kopirano.
Pogoste napake
- Prilepljen ključ v poziv. Zdaj je v zgodovini klepeta. Namesto tega uporabite obrazec za skrivnosti.
- Javna predpona na tajni spremenljivki.
VITE_OPENAI_API_KEYpošlje ključ vsakemu obiskovalcu. - Potrjena datoteka
.env. Poskrbite, da je v.gitignorepred prvim pošiljanjem. - En ključ za vse. Za testno in živo okolje ter za vsako aplikacijo uporabite ločene ključe.
- Brez omejitve porabe. Uhajajoč ali zlorabljen ključ brez omejitve lahko naredi velik račun, preden to opazite.
- Skrivanje namesto zamenjave. Ko je ključ izpostavljen, samo nov ključ to popravi.
- Ključi na posnetkih zaslona. Pred deljenjem nastavitev za pomoč jih obrežite ali zamegljite.
Kontrolni seznam
- Vsak ključ je shranjen kot skrivnost ali okoljska spremenljivka, ne v kodi.
- Noben ključ ali datoteka
.envni v Gitu. - Tajni ključi se uporabljajo samo v kodi na strežniku.
- Nobena tajna spremenljivka nima javne predpone, kot je
VITE_aliNEXT_PUBLIC_. - Preiskal sem JavaScript živega spletnega mesta za predpono vsakega ključa in nič nisem našel.
- Ključi so omejeni ali obsegu prilagojeni, kjer ponudnik to dovoljuje.
- Testni in živi ključi so ločeni.
- Plačljive funkcije zahtevajo prijavo in imajo omejitve na uporabnika.
- Vsak plačljiv ponudnik ima omejitev porabe ali opozorilo.
- Vem, kako zamenjati vsak ključ, in vsak izpostavljen ključ je bil zamenjan.
Varovanje ključev na Mythex
Mythex drži ključe stran od vaše kode in klepeta na dva načina:
- Kartica zahtevka za skrivnosti. Ko agent potrebuje ključ, v klepetu pokaže kartico, kjer vrednost vnesete v polja obrazca, ne v vnosno polje sporočila, in shranjena je kot skrivnost projekta. Glejte Skrivnosti v klepetu.
- Nastavitve projekta → Secrets ali
/secretsv klepetu, da ključe dodajate ali spreminjate sami. Glejte Okoljske spremenljivke in skrivnosti.
Po spremembi skrivnosti za objavljeno aplikacijo jo ponovno objavite, da živa aplikacija prevzame novo vrednost. Izvoženi projekti skrivnosti ne vključujejo, zato jih znova dodajte, kjer koli zaženete kodo. Če se ključ kdaj pojavi v klepetu, ga zamenjajte pri ponudniku.
Za preostanek varnostnega pregleda pred izdajo sledite kontrolnemu seznamu varnosti za aplikacije, zgrajene z AI. Če dodajate funkcije z AI, kako uporabljati LLM API-je podrobneje pokriva ključe in stroške.
Vprašanja
Ali je varno dati API ključ v kodo frontenda?
Samo če ga je ponudnik zasnoval kot javnega, na primer javni ključ Stripe ali ključ za zemljevide, omejen na vašo domeno. Vsak ključ, ki lahko porabi denar ali bere zasebne podatke, mora ostati na strežniku, saj lahko vsakdo prebere, kar pride v brskalnik.
Kaj naj storim, če sem API ključ prilepil v klepet ali javni repozitorij?
Zamenjajte ga: ustvarite nov ključ pri ponudniku, posodobite skrivnosti aplikacije, objavite znova in nato izbrišite stari ključ. Brisanje sporočila ali commita ni dovolj, ker kopije morda že obstajajo.
Kje naj hranim API ključe?
V okoljskih spremenljivkah ali nastavitvah skrivnosti vašega gostitelja, ki jih kodo na strežniku prebere med izvajanjem. Ne smejo biti zapisani v izvorne datoteke, poslani v Git ali vključeni v posnetke zaslona.
Kako ugotovim, ali je moj API ključ izpostavljen na spletnem mestu?
Odprite svoje živo spletno mesto, oglejte si izvorno kodo strani in datoteke JavaScript v razvijalskih orodjih brskalnika ter poiščite začetek ključa. Če se pojavi, je izpostavljen in ga je treba premakniti na strežnik ter zamenjati.