Kako čuvati API ključeve bezbednim u aplikaciji
Da biste čuvali API ključeve bezbednim, čuvajte ih kao tajne ili promenljive okruženja na svom hostingu, koristite ih samo u kodu na serveru i nikada ih ne lepite u razgovor, fajlove koda, snimke ekrana ili Git repozitorijum. Dajte svakom ključu najmanju dozvolu koja mu treba, postavite limite potrošnje kod provajdera i ako ključ ikada procuri, rotirajte ga — napravite novi i obrišite stari — umesto da samo sakrijete mesto gde se pojavio.
API ključ je lozinka za neki servis. Vaš OpenAI ključ dozvoljava nekome da troši vaš novac na AI; vaš Stripe tajni ključ dozvoljava nekome da izdaje povraćaje; ključ vašeg provajdera mejla dozvoljava nekome da šalje poštu u vaše ime. Graditelji aplikacija uz AI dobro povezuju ove ključeve, ali nisu uvek pažljivi oko toga gde završe, pa ovaj vodič pokriva kako ih čuvati bezbednim i kako to proveriti.
Javni ključevi i tajni ključevi
Nisu svi ključevi tajni. Razumevanje razlike sprečava da paničite zbog pogrešnog, a ignorišete pravi.
| Tip | Primeri | Sme li u pregledač? |
|---|---|---|
| Publishable / javni ključevi | Stripe ključ pk_…, ključ za mape ograničen na domen, neki analitički ID-jevi | Da — tako je namenjeno |
| Tajni ključevi | Stripe sk_…, OpenAI i Anthropic ključevi, ključevi provajdera mejla, lozinke za bazu | Nikada |
| Servisni/administratorski ključevi | Ključevi koji zaobilaze pravila pristupa na hostovanoj bazi | Nikada — tretirajte ih kao najosetljivije |
Ako niste sigurni koji je tip ključa, proverite dokumentaciju provajdera. Kada sumnjate, tretirajte ga kao tajnu.
Korak 1: Čuvajte ključeve kao tajne, ne u kodu
Ključevi pripadaju promenljivim okruženja ili podešavanjima tajni na vašem hostingu. Vaš kod ih čita po imenu u trenutku rada (na primer process.env.OPENAI_API_KEY), tako da se vrednost nikada ne pojavljuje u vašim fajlovima. Za pozadinu pogledajte šta su promenljive okruženja i tajne.
Premesti svaki API ključ iz koda u promenljive okruženja. Navedi svaki ključ koji si pronašao, u kojem je fajlu bio i kako si nazvao promenljivu. Ne prikazuj vrednosti.
Zatim proverite da ništa nije ostalo:
Pretraži ceo projekat, uključujući konfiguracione fajlove i sve .env fajlove, za bilo šta što liči na API ključ ili lozinku. Prijavi fajl i red, a ne vrednost.
Korak 2: Koristite tajne ključeve samo na serveru
Ovo je pravilo koje je najvažnije. Sve što pregledač primi, posetilac može da pročita — izvorni kod stranice i JavaScript fajlovi su vidljivi u alatkama za programere.
Dakle, ako aplikaciji treba OpenAI, pregledač treba da poziva vaš server, a vaš server poziva OpenAI sa ključem. Ključ nikada ne napušta server.
Funkcija za razgovor poziva OpenAI direktno iz pregledača. Premesti taj poziv na rutu API-ja na serveru koja čita OPENAI_API_KEY iz okruženja. Pregledač treba da poziva samo našu rutu. Zahtevaj prijavu za rutu.
Pazite na jednu čestu zamku u frontend okvirima: promenljive sa javnim prefiksom — VITE_ u Vite-u, NEXT_PUBLIC_ u Next.js-u — namerno se ugrađuju u kod u pregledaču. Tajni ključ sa jednim od ovih prefiksa je izložen, iako je „u promenljivoj okruženja”.
Korak 3: Testirajte da ništa ne curi
Ne verujte da je radilo — proverite aktivan sajt:
- Otvorite objavljenu aplikaciju u pregledaču.
- Otvorite alatke za programere, pa karticu Sources ili Network.
- Pretražite fajlove za prve karaktere svakog tajnog ključa (na primer
sk_ilisk-). - Proverite mrežne zahteve koje aplikacija pravi. Zahtev koji ide direktno iz pregledača ka plaćenom AI provajderu je upozorenje.
Ako pronađete tajni ključ, premestite ga na server (korak 2) i rotirajte ga (korak 6), jer je već bio javan.
Korak 4: Ograničite šta svaki ključ može da radi
Mnogi provajderi dozvoljavaju ograničavanje ključa:
- Ograničeni ključevi koji mogu samo ono što vaša aplikacija treba. Stripe, na primer, podržava ograničene ključeve sa određenim dozvolama.
- Ograničenja po domenu ili IP adresi za ključeve koji moraju biti javni, poput ključeva za mape.
- Zasebni ključevi po aplikaciji i po okruženju, tako da jedno curenje ne izlaže sve i opozivanje jednog ne kvari ostale.
- Ključevi za testiranje dok gradite, a ključevi za produkciju samo u objavljenoj aplikaciji.
Korak 5: Postavite plafon štete
Čak i dobro zaštićen ključ može da se zloupotrebi kroz vašu aplikaciju — na primer, neko skriptuje vašu AI funkciju hiljade puta.
- Postavite limite potrošnje ili upozorenja kod svakog plaćenog provajdera.
- Zahtevajte prijavu za svaku funkciju koja košta novac po pozivu.
- Dodajte ograničenje po korisniku. Pogledajte šta je ograničavanje broja zahteva.
Dodaj limit od 30 AI zahteva po korisniku na sat za /api/chat. Kada se limit dostigne, vrati jasnu poruku. Odbij zahteve korisnika koji nisu prijavljeni.
Korak 6: Rotirajte ključeve koji procure
Ako se tajni ključ pojavi tamo gde ne bi smeo — u poruci u razgovoru, commit-u, snimku ekrana, zahtevu za podršku, kodu u pregledaču — pretpostavite da je ugrožen.
- Napravite novi ključ kod provajdera.
- Ažurirajte tajnu u podešavanjima aplikacije.
- Ponovo deplojujte ili ponovo objavite aplikaciju da aktivna aplikacija koristi novi ključ.
- Obrišite stari ključ kod provajdera.
- Proverite evidenciju korišćenja kod provajdera za aktivnosti koje ne prepoznajete.
Brisanje poruke u razgovoru ili Git commit-a nije dovoljno. Git istorija čuva stare verzije, a sve što je bilo javno možda je već kopirano.
Česte greške
- Lepljenje ključa u upit. Sada je u istoriji razgovora. Umesto toga koristite formu za tajne.
- Javni prefiks na tajnoj promenljivoj.
VITE_OPENAI_API_KEYisporučuje ključ svakom posetiocu. - Commit-ovanje
.envfajla. Proverite da je u.gitignorepre prvog push-a. - Jedan ključ svuda. Koristite zasebne ključeve za testiranje i produkciju i za svaku aplikaciju.
- Bez limita potrošnje. Procureli ili zloupotrebljeni ključ bez plafona može da napuni veliki račun pre nego što to primetite.
- Skrivanje umesto rotacije. Kada je ključ jednom izložen, samo novi ključ to popravlja.
- Ključevi na snimcima ekrana. Isecite ili zamaglite stranice sa podešavanjima pre nego što ih podelite radi pomoći.
Kontrolna lista
- Svaki ključ je sačuvan kao tajna ili promenljiva okruženja, ne u kodu.
- Nijedan
.envfajl ni ključ nije commit-ovan u Git. - Tajni ključevi se koriste samo u kodu na serveru.
- Nijedna tajna promenljiva nema javni prefiks kao
VITE_iliNEXT_PUBLIC_. - Pretražio/la sam JavaScript aktivnog sajta za prefiks svakog ključa i ništa nisam našao.
- Ključevi su ograničeni gde provajder to dozvoljava.
- Ključevi za testiranje i produkciju su odvojeni.
- Plaćene funkcije zahtevaju prijavu i imaju ograničenja po korisniku.
- Svaki plaćeni provajder ima plafon potrošnje ili upozorenje.
- Znam kako da rotiram svaki ključ, a svaki ključ koji je ikada bio izložen je rotiran.
Čuvanje ključeva bezbednim na Mythex-u
Mythex drži ključeve van vašeg koda i razgovora na dva načina:
- Kartica za zahtev za tajne. Kada agent treba ključ, u razgovoru prikaže karticu u kojoj unosite vrednost u polja forme, a ne u polje za poruke, i ona se čuva kao tajna projekta. Pogledajte Tajne u razgovoru.
- Podešavanja projekta → Secrets, ili
/secretsu razgovoru, da sami dodajete ili menjate ključeve. Pogledajte Promenljive okruženja i tajne.
Posle promene tajne za objavljenu aplikaciju, ponovo je objavite da aktivna aplikacija preuzme promenu. Izvezeni projekti ne sadrže tajne, pa ih ponovo dodajte gde god sledeći put pokrenete kod. Ako se ključ ikada pojavi u razgovoru, rotirajte ga kod provajdera.
Za ostatak bezbednosne provere pre lansiranja, prođite kroz kontrolnu listu bezbednosti za aplikacije napravljene uz AI. Ako dodajete AI funkcije, kako koristiti LLM API-je detaljnije pokriva ključeve i troškove.
Pitanja
Da li je bezbedno staviti API ključ u kod za frontend?
Samo ako je provajder tom ključu namenio da bude javan, kao što je Stripe-ov publishable ključ ili ključ za mape ograničen na vaš domen. Svaki ključ koji može da troši novac ili čita privatne podatke mora ostati na serveru, jer sve što se pošalje pregledaču može da pročita bilo ko.
Šta da radim ako sam nalepio API ključ u razgovor ili javni repozitorijum?
Rotirajte ga: napravite novi ključ kod provajdera, ažurirajte tajne svoje aplikacije, ponovo objavite i tek onda obrišite stari ključ. Brisanje poruke ili commit-a nije dovoljno, jer kopije možda već postoje.
Gde treba čuvati API ključeve?
U podešavanjima promenljivih okruženja ili tajni na vašem hostingu, koje server čita u trenutku rada. Ne smeju biti upisani u izvorne fajlove, commit-ovani u Git ni prikazani na snimcima ekrana.
Kako mogu da saznam da je moj API ključ izložen na sajtu?
Otvorite svoj aktivan sajt, pogledajte izvorni kod stranice i JavaScript fajlove u alatkama za programere pregledača i potražite početak ključa. Ako se pojavi, izložen je i treba ga premestiti na server i rotirati.