Kako čuvati API ključeve sigurnim u svojoj aplikaciji
Da biste API ključeve držali sigurnim, čuvajte ih kao tajne ili varijable okruženja na svom hostingu, koristite ih samo u kodu na serveru i nikada ih ne lijepite u chat, datoteke s kodom, snimke ekrana ili Git repozitorijum. Svakom ključu dajte najmanju dozvolu koja mu treba, postavite ograničenja potrošnje kod provajdera i ako ključ ikada procuri, zamijenite ga — napravite novi i obrišite stari — umjesto da samo sakrijete mjesto gdje se pojavio.
API ključ je lozinka za neki servis. Vaš OpenAI ključ omogućava nekome da troši vaš novac na AI; vaš Stripe tajni ključ omogućava nekome da izdaje povrate; ključ vašeg provajdera e-pošte omogućava nekome da šalje poštu u vaše ime. Graditelji AI aplikacija dobro ih ugrađuju, ali nisu uvijek pažljivi gdje završe, zato ovaj vodič pokriva kako ih čuvati sigurnim i kako to provjeriti.
Javni ključevi i tajni ključevi
Ne može svaki ključ biti tajna. Razumijevanje razlike sprječava da paničite zbog pogrešnog, a ignorišete pravi.
| Vrsta | Primjeri | Može li biti u pregledaču? |
|---|---|---|
| Javni ključevi (publishable) | Stripe ključ pk_…, ključ za karte ograničen na vaš domen, neki ID-jevi za analitiku | Da — namijenjeni su za to |
| Tajni ključevi | Stripe sk_…, OpenAI i Anthropic ključevi, ključevi provajdera e-pošte, lozinke baza podataka | Nikada |
| Servisni/administratorski ključevi | Ključevi koji zaobilaze pravila pristupa na hostovanoj bazi podataka | Nikada — tretirajte ih kao najosjetljivije |
Ako niste sigurni koje je vrste neki ključ, provjerite dokumentaciju provajdera. Kada sumnjate, tretirajte ga kao tajnu.
Korak 1: Čuvajte ključeve kao tajne, a ne u kodu
Ključevi pripadaju varijablama okruženja ili postavkama tajni vašeg hostinga. Vaš kod ih čita po imenu u trenutku izvršavanja (na primjer process.env.OPENAI_API_KEY), pa se vrijednost nikada ne pojavljuje u vašim datotekama. Za pozadinu pogledajte šta su varijable okruženja i tajne.
Premjesti svaki API ključ iz koda u varijable okruženja. Navedi svaki ključ koji si pronašao, u kojoj je datoteci bio i koje ime varijable si koristio. Ne prikazuj mi vrijednosti.
Zatim provjerite da ništa nije ostalo:
Pretraži cijeli projekat, uključujući konfiguracijske datoteke i sve .env datoteke, za bilo šta što liči na API ključ ili lozinku. Prijavi datoteku i liniju, ne vrijednost.
Korak 2: Koristite tajne ključeve samo na serveru
Ovo je pravilo koje najviše važi. Sve što pregledač primi, posjetilac može pročitati — izvorni kod stranice i JavaScript datoteke vidljivi su u alatima za programere.
Dakle, ako aplikacija treba pozvati OpenAI, pregledač treba pozvati vaš server, a vaš server poziva OpenAI s ključem. Ključ nikada ne napušta server.
Funkcija chata direktno poziva OpenAI iz pregledača. Premjesti taj poziv na rutu API-ja na serveru koja čita OPENAI_API_KEY iz okruženja. Pregledač treba da poziva samo našu rutu. Zahtijevaj prijavu za rutu.
Pazite na jednu čestu zamku u okvirima za frontend: varijable s javnim prefiksom — VITE_ u Vite-u, NEXT_PUBLIC_ u Next.js-u — namjerno se ugrađuju u kod pregledača. Tajni ključ s jednim od tih prefiksa je izložen, iako je „u varijabli okruženja”.
Korak 3: Testirajte da ništa ne curi
Nemojte vjerovati da je radilo — provjerite aktivni sajt:
- Otvorite objavljenu aplikaciju u pregledaču.
- 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 direktno iz pregledača ka plaćenom AI provajderu je znak upozorenja.
Ako pronađete tajni ključ, premjestite ga na server (korak 2) i zamijenite ga (korak 6), jer je već bio javan.
Korak 4: Ograničite šta svaki ključ može
Mnogi provajderi dozvoljavaju da ograničite ključ:
- Ograničeni ključevi koji mogu samo ono što vaša aplikacija treba. Stripe, na primjer, podržava ograničene ključeve sa određenim dozvolama.
- Ograničenja po domenu ili IP adresi za ključeve koji moraju biti javni, kao što su ključevi za karte.
- Odvojeni ključevi po aplikaciji i po okruženju, tako da jedno curenje ne izlaže sve i opozivanje jednog ne narušava druge.
- Testni ključevi tokom izgradnje, a pravi ključevi samo u objavljenoj aplikaciji.
Korak 5: Postavite granicu štete
Čak i dobro zaštićen ključ može biti zloupotrijebljen kroz vašu aplikaciju — na primjer, neko skriptom poziva vašu AI funkciju hiljadu puta.
- Postavite ograničenja potrošnje ili upozorenja kod svakog plaćenog provajdera.
- Zahtijevajte prijavu za svaku funkciju koja košta novac po pozivu.
- Dodajte ograničenje po korisniku. Pogledajte šta je ograničavanje zahtjeva.
Dodaj ograničenje od 30 AI zahtjeva po korisniku po satu za /api/chat. Vrati jasnu poruku kada se ograničenje dostigne. Odbij zahtjeve od korisnika koji nisu prijavljeni.
Korak 6: Zamijenite ključeve koji procure
Ako se tajni ključ pojavi tamo gdje ne bi smio — u poruci chata, commitu, snimku ekrana, zahtjevu za podršku, kodu u pregledaču — pretpostavite da je kompromitovan.
- Napravite novi ključ kod provajdera.
- Ažurirajte tajnu u postavkama svoje aplikacije.
- Ponovo primijenite ili objavite aplikaciju da aktivna verzija koristi novi ključ.
- Obrišite stari ključ kod provajdera.
- Provjerite zapise potrošnje kod provajdera za aktivnost koju ne prepoznajete.
Brisanje poruke iz chata ili Git commita nije dovoljno. Git historija č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 historiji chata. Koristite umjesto toga obrazac za tajne.
- Javni prefiks na tajnoj varijabli.
VITE_OPENAI_API_KEYisporučuje ključ svakom posjetiocu. - Commitovanje
.envdatoteke. Provjerite da je u.gitignoreprije prvog push-a. - Jedan ključ svuda. Koristite odvojene ključeve za testiranje i produkciju, te za svaku aplikaciju.
- Nema ograničenja potrošnje. Procurjeli ili zloupotrijebljen ključ bez ograničenja može napraviti veliki račun prije nego to primijetite.
- Skrivanje umjesto zamjene. Kada je ključ jednom izložen, samo novi ključ rješava problem.
- Ključevi na snimcima ekrana. Izrežite ili zamutite stranice s postavkama prije nego ih podijelite za pomoć.
Kontrolna lista
- Svaki ključ je sačuvan kao tajna ili varijabla okruženja, a ne u kodu.
- Nijedna .env datoteka ni ključ nisu commitovani na Git.
- Tajni ključevi se koriste samo u kodu na serveru.
- Nijedna tajna varijabla nema javni prefiks kao što su
VITE_iliNEXT_PUBLIC_. - Pretražio sam JavaScript aktivnog sajta za prefiks svakog ključa i ništa nisam pronašao.
- Ključevi su ograničeni gdje provajder to dozvoljava.
- Testni i pravi ključevi su odvojeni.
- Funkcije sa plaćanjem zahtijevaju prijavu i imaju ograničenja po korisniku.
- Svaki plaćeni provajder ima ograničenje potrošnje ili upozorenje.
- Znam kako zamijeniti svaki ključ, a svaki ključ koji je ikada bio izložen je zamijenjen.
Čuvanje ključeva sigurnim na Mythexu
Mythex drži ključeve van vašeg koda i chata na dva načina:
- Kartica za traženje tajni. Kada agent treba ključ, u chatu prikaže karticu u kojoj unosite vrijednost u polja obrasca, a ne u polje za poruku, i čuva se kao tajna projekta. Pogledajte Tajne u chatu.
- Postavke projekta → Secrets, ili
/secretsu chatu, da sami dodate ili promijenite ključeve. Pogledajte Varijable okruženja i tajne.
Nakon promjene tajne za objavljenu aplikaciju, ponovo je objavite da aktivna aplikacija preuzme promjenu. Izvezeni projekti ne sadrže tajne, pa ih ponovo dodajte gdje god sljedeći put pokrenete kod. Ako se ključ ikada pojavi u chatu, zamijenite ga kod provajdera.
Za ostatak sigurnosne provjere prije lansiranja, prođite kroz sigurnosnu kontrolnu listu za aplikacije izgrađene uz AI. Ako dodajete AI funkcije, kako koristiti LLM API-je detaljnije pokriva ključeve i troškove.
Pitanja
Da li je sigurno staviti API ključ u kod frontenda?
Samo ako je provajder taj ključ zamislio kao javan, kao što je Stripeov javni ključ ili ključ za karte ograničen na vaš domen. Svaki ključ koji može trošiti novac ili čitati privatne podatke mora ostati na serveru, jer sve što se pošalje pregledaču može pročitati bilo ko.
Šta da radim ako sam zalijepio API ključ u chat ili javni repozitorijum?
Zamijenite ga: napravite novi ključ kod provajdera, ažurirajte tajne svoje aplikacije, ponovo je objavite, 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 serveru čita u trenutku izvršavanja. Ne smiju biti upisani u izvorne datoteke, poslani na Git ili uključeni u snimke ekrana.
Kako mogu provjeriti da li je moj API ključ izložen na sajtu?
Otvorite svoj aktivni sajt, pogledajte izvorni kod stranice i JavaScript datoteke u alatima za programere pregledača i potražite početak ključa. Ako se pojavi, izložen je i treba ga premjestiti na server i zamijeniti.