Kako čuvati API ključeve sigurnima u svojoj aplikaciji
Da biste API ključeve čuvali sigurnima, spremite ih kao tajne ili varijable okruženja na svom hostingu, koristite ih samo u kodu na poslužitelju i nikada ih ne lijepite u chat, datoteke s kodom, snimke zaslona ili Git repozitorij. Svakom ključu dajte najmanje dozvola koje treba, postavite ograničenja potrošnje kod pružatelja i ako ključ ikada procuri, zamijenite ga — kreirajte novi i obrišite stari — umjesto da samo skrivate mjesto na kojem se pojavio.
API ključ je lozinka za neku uslugu. Vaš OpenAI ključ omogućuje nekome da troši vaš novac na AI; vaš Stripe tajni ključ omogućuje nekome izdavanje povrata; ključ vašeg pružatelja e-pošte omogućuje nekome slanje pošte u vaše ime. Graditelji aplikacija uz AI dobro ih povezuju, ali nisu uvijek pažljivi gdje završe, pa ovaj vodič pokriva kako ih čuvati sigurnima i kako to provjeriti.
Javni ključevi i tajni ključevi
Ne čuva se svaki ključ u tajnosti. Razlika vas sprječava da paničite zbog pogrešnog i ignorirate pravi.
| Vrsta | Primjeri | Smije li biti u pregledniku? |
|---|---|---|
| Javni ključevi (publishable) | Stripe ključ pk_…, ključ za karte ograničen na vašu domenu, neki ID-jevi za analitiku | Da — tako su dizajnirani |
| Tajni ključevi | Stripe sk_…, OpenAI i Anthropic ključevi, ključevi pružatelja e-pošte, lozinke baza podataka | Nikada |
| Servisni/administratorski ključevi | Ključevi koji zaobilaze pravila pristupa na hostanoj bazi podataka | Nikada — tretirajte ih kao najosjetljivije |
Ako niste sigurni koje je vrste ključ, provjerite dokumentaciju pružatelja. U sumnji, tretirajte ga kao tajnu.
Korak 1: Spremite ključeve kao tajne, a ne u kod
Ključevi pripadaju u varijable okruženja ili postavke tajni vašeg hostinga. Kod ih čita po imenu tijekom rada (na primjer process.env.OPENAI_API_KEY), pa se vrijednost nikada ne pojavljuje u vašim datotekama. Za pozadinu pogledajte što su varijable okruženja i tajne.
Premjesti svaki API ključ iz koda u varijable okruženja. Popiši svaki ključ koji si pronašao, u kojoj je datoteci bio i koje si ime varijable koristio. Ne prikazuj vrijednosti.
Zatim provjerite da ništa nije ostalo:
Pretraži cijeli projekt, uključujući konfiguracijske datoteke i sve .env datoteke, za svime što liči na API ključ ili lozinku. Prijavi datoteku i redak, ne vrijednost.
Korak 2: Koristite tajne ključeve samo na poslužitelju
Ovo je pravilo koje je najvažnije. Sve što preglednik primi, posjetitelj može pročitati — izvorni kod stranice i JavaScript datoteke vidljivi su u alatima za programere.
Dakle, ako aplikacija treba pozvati OpenAI, preglednik treba pozvati vaš poslužitelj, a vaš poslužitelj poziva OpenAI s ključem. Ključ nikada ne napušta poslužitelj.
Značajka chata izravno poziva OpenAI iz preglednika. Premjesti taj poziv na API rutu na poslužitelju koja čita OPENAI_API_KEY iz okruženja. Preglednik treba zvati samo našu rutu. Zahtijevaj prijavu za rutu.
Pazite na jednu čestu zamku u frontend okvirima: varijable s javnim prefiksom — VITE_ u Viteu, NEXT_PUBLIC_ u Next.js-u — namjerno se ugrađuju u kod za preglednik. Tajni ključ s jednim od tih prefiksa je izložen, iako je „u varijabli okruženja“.
Korak 3: Provjerite da ništa ne curi
Ne vjerujte da je sve u redu — provjerite živu stranicu:
- Otvorite objavljenu aplikaciju u pregledniku.
- Otvorite alate za programere, zatim karticu Sources ili Network.
- Pretražite datoteke za prvih nekoliko znakova svakog tajnog ključa (na primjer
sk_ilisk-). - Provjerite mrežne zahtjeve koje aplikacija šalje. Zahtjev koji ide izravno iz preglednika prema plaćenom AI pružatelju je crvena zastavica.
Ako pronađete tajni ključ, premjestite ga na poslužitelj (korak 2) i zamijenite ga (korak 6), jer je već bio javan.
Korak 4: Ograničite što svaki ključ smije
Mnogi pružatelji dopuštaju ograničavanje ključa:
- Ključevi s ograničenim opsegom koji mogu raditi samo ono što aplikacija treba. Stripe, na primjer, podržava ograničene ključeve s određenim dozvolama.
- Ograničenja po domeni ili IP adresi za ključeve koji moraju biti javni, poput ključeva za karte.
- Zasebni ključevi po aplikaciji i po okruženju, kako jedno curenje ne bi izložilo sve i opoziv jednog ne bi srušio ostale.
- Testni ključevi tijekom gradnje, a živi ključevi samo u objavljenoj aplikaciji.
Korak 5: Postavite gornju granicu štete
Čak i dobro zaštićen ključ može se zloupotrijebiti kroz vašu aplikaciju — netko može skriptom pozvati vašu AI značajku tisuću puta, na primjer.
- Postavite ograničenja potrošnje ili upozorenja kod svakog plaćenog pružatelja.
- Zahtijevajte prijavu za svaku značajku koja košta novac po pozivu.
- Dodajte ograničenje brzine po korisniku. Pogledajte što je ograničavanje brzine.
Dodaj ograničenje od 30 AI zahtjeva po korisniku na sat za /api/chat. Kada se ograničenje dosegne, vrati jasnu poruku. Odbij zahtjeve od korisnika koji nisu prijavljeni.
Korak 6: Zamijenite ključeve koji su procurjeli
Ako se tajni ključ pojavi tamo gdje ne bi smio — u poruci chata, commitu, snimci zaslona, zahtjevu podršci, kodu u pregledniku — pretpostavite da je ugrožen.
- Kreirajte novi ključ kod pružatelja.
- Ažurirajte tajnu u postavkama svoje aplikacije.
- Ponovno implementirajte ili ponovno objavite aplikaciju kako bi živa aplikacija koristila novi ključ.
- Obrišite stari ključ kod pružatelja.
- Provjerite zapise potrošnje kod pružatelja za aktivnost koju ne prepoznajete.
Brisanje poruke u chatu ili Git commita nije dovoljno. Git povijest čuva stare verzije, a sve što je bilo javno možda je već kopirano.
Česte greške
- Lijepljenje ključa u upit. Sada je u povijesti chata. Umjesto toga koristite obrazac za tajne.
- Javni prefiks na tajnoj varijabli.
VITE_OPENAI_API_KEYisporučuje ključ svakom posjetitelju. - Commitanje
.envdatoteke. Provjerite da je u.gitignoreprije prvog pushanja. - Jedan ključ za sve. Koristite zasebne ključeve za testiranje i produkciju te za svaku aplikaciju.
- Nema ograničenja potrošnje. Procurjeli ili zloupotrijebljeni ključ bez ograničenja može napraviti velik račun prije nego ga primijetite.
- Skrivanje umjesto zamjene. Kada je ključ jednom bio izložen, samo novi ključ to popravlja.
- Ključevi na snimkama zaslona. Izrežite ili zamutite stranice s postavkama prije dijeljenja za pomoć.
Popis za provjeru
- Svaki ključ je spremljen kao tajna ili varijabla okruženja, a ne u kodu.
- Nijedna .env datoteka ni ključ nisu commitani u Git.
- Tajni ključevi koriste se samo u kodu na poslužitelju.
- Nijedna tajna varijabla nema javni prefiks poput
VITE_iliNEXT_PUBLIC_. - Pretražio sam JavaScript žive stranice za prefiks svakog ključa i nisam ništa pronašao.
- Ključevi su ograničeni gdje to pružatelj dopušta.
- Testni i živi ključevi su odvojeni.
- Plaćene značajke zahtijevaju prijavu i imaju ograničenja po korisniku.
- Svaki plaćeni pružatelj ima gornju granicu potrošnje ili upozorenje.
- Znam kako zamijeniti svaki ključ i svaki ključ koji je ikada bio izložen je zamijenjen.
Čuvanje ključeva na Mythexu
Mythex drži ključeve podalje od vašeg koda i chata na dva načina:
- Kartica zahtjeva za tajnama. Kada agent treba ključ, u chatu prikaže karticu u kojoj unosite vrijednost u polja obrasca, a ne u okvir za poruke, i sprema se kao tajna projekta. Pogledajte Tajne u chatu.
- Postavke projekta → Secrets ili
/secretsu chatu za dodavanje ili promjenu ključeva sami. Pogledajte Varijable okruženja i tajne.
Nakon promjene tajne za objavljenu aplikaciju ponovno je objavite kako bi živa aplikacija preuzela promjenu. Izvezeni projekti ne sadrže tajne, pa ih ponovno dodajte gdje god sljedeći put pokrenete kod. Ako se ključ ikada pojavi u chatu, zamijenite ga kod pružatelja.
Za ostatak sigurnosnog pregleda prije lansiranja, prođite kroz sigurnosnu listu za aplikacije izrađene uz AI. Ako dodajete AI značajke, kako koristiti LLM API-je detaljnije pokriva ključeve i troškove.
Pitanja
Je li sigurno staviti API ključ u kod frontenda?
Samo ako je pružatelj tako dizajnirao ključ da bude javan, poput Stripeova javnog ključa ili ključa za karte ograničenog na vašu domenu. Svaki ključ koji može trošiti novac ili čitati privatne podatke mora ostati na poslužitelju, jer svatko može pročitati ono što se šalje pregledniku.
Što učiniti ako sam zalijepio API ključ u chat ili javni repozitorij?
Zamijenite ga: kreirajte novi ključ kod pružatelja, ažurirajte tajne svoje aplikacije, ponovno objavite i zatim obrišite stari ključ. Brisanje poruke ili commita nije dovoljno, jer kopije možda već postoje.
Gdje treba čuvati API ključeve?
U varijablama okruženja ili postavkama tajni vašeg hostinga, koje kod na poslužitelju čita tijekom rada. Ne smiju se upisivati u izvorne datoteke, commitati u Git niti biti uključeni u snimke zaslona.
Kako provjeriti je li moj API ključ izložen na mojoj web stranici?
Otvorite svoju živu stranicu, pogledajte izvorni kod stranice i JavaScript datoteke u alatima za programere preglednika te potražite početak ključa. Ako se pojavi, ključ je izložen i treba ga premjestiti na poslužitelj i zamijeniti.