Šta su varijable okruženja i tajne? Jednostavan vodič
Varijabla okruženja je imenovana postavka — kao što su DATABASE_URL ili STRIPE_SECRET_KEY — koja se predaje vašoj aplikaciji kada se pokrene, umjesto da bude upisana u kod. Tajna je varijabla okruženja čija vrijednost mora ostati privatna: API ključ, lozinka ili ključ za potpisivanje. Kada ove vrijednosti držite van koda, možete ih mijenjati bez uređivanja aplikacije, koristiti različite za testiranje i za stvarne korisnike i spriječiti da procure kada dijelite ili objavljujete kod.
Zašto je to važno kada gradite uz AI
Čim vaša aplikacija uradi nešto korisno uz drugi servis — naplati plaćanje, pošalje e-poštu, pozove AI model — treba joj ključ. Alati za izradu aplikacija uz AI redovno traže te ključeve, a gdje ključ završi određuje da li je aplikacija sigurna.
U aplikacijama izgrađenim uz AI često se dešavaju dvije stvari:
- Ključ se zalijepi u chat ili u kod. Tada živi u historiji razgovora, u fajlovima projekta i u svakom izvozu ili repozitoriju. Ko ga vidi, može koristiti vaš račun.
- Ključ se koristi u pregledniku. Ako kod koji poziva Stripe ili OpenAI radi na stranici, ključ se šalje svakom posjetiocu. Ljudi to gledaju, a automatski skeneri stalno traže izložene ključeve.
Razumijevanje varijabli okruženja pomaže vam da prepoznate oba problema i zatražite popravku.
Svakodnevna analogija: hotelski sef
Kod vaše aplikacije je kao hotelska soba. Gosti (i spremačice, i svako kome date karticu za ulaz) prolaze kroz nju. Ne biste ostavili pasoš na stolu.
Varijable okruženja su sef u sobi. Soba zna da sef postoji i kako se otvara kada je potrebno, ali pasoš ne leži naokolo. A ako se preselite iz jedne sobe u drugu — s vašeg testnog podešavanja na živi sajt — u sef te sobe stavite drugi pasoš, bez preuređivanja cijele sobe.
Kako to funkcioniše
Vaš kod se poziva na naziv, a ne na vrijednost. U JavaScriptu na serveru to izgleda kao process.env.STRIPE_SECRET_KEY. Kada se aplikacija pokrene, platforma na kojoj radi popuni vrijednost za taj naziv. Promijenite vrijednost u postavkama platforme, ponovo pokrenite ili ponovo objavite, i aplikacija koristi novu — bez izmjene koda.
Odakle dolaze vrijednosti zavisi od toga gdje aplikacija radi:
| Gdje radi | Gdje se vrijednosti čuvaju |
|---|---|
| Na laptopu developera | Lokalni fajl najčešće nazvan .env, koji se nikada ne smije commit-ovati u git |
| U pregledu alata za izradu uz AI | Panel sa tajnama ili postavkama projekta |
| Na platformi za hosting | Postavke varijabli okruženja te platforme |
| U GitHub Actions ili drugoj automatizaciji | Šifrovano skladište tajni tog servisa |
Javne i tajne varijable
Nisu sve varijable okruženja tajne. Korisno ih je podijeliti u dvije grupe:
| Vrsta | Primjeri | Da li ih preglednik može vidjeti? |
|---|---|---|
| Javna konfiguracija | Naziv sajta, javni ID za analitiku, Stripe publishable ključ, prekidači funkcija | Da, to je u redu |
| Tajne | Stripe secret ključ, OpenAI ili Anthropic API ključ, string za konekciju na bazu, ključ provajdera za e-poštu, tajna za potpisivanje webhook-a | Nikada |
Web okviri ovu podjelu čine očitom. U Vite-u se u kod preglednika uključuju samo varijable čiji naziv počinje sa VITE_; u Next.js-u prefiks je NEXT_PUBLIC_. To je sigurnosna osobina: sve s tim prefiksima završava u fajlovima koje svaki posjetilac preuzima, pa tajna nikada ne smije dobiti takav prefiks.
Primjer: dugme za AI sažetak
Želite dugme „Sažmi ovu bilješku” koje poziva AI model.
Nesigurna verzija: kod dugmeta, koji se izvršava u pregledniku, direktno poziva AI provajdera s API ključem upisanim u kod. U pregledu radi. Ali svako može otvoriti alate za developere u pregledniku, kopirati ključ i potrošiti vaš budžet.
Sigurna verzija:
- Ključ napravite kod AI provajdera i sačuvate ga kao tajnu, npr.
OPENAI_API_KEY(ili slično), u postavkama projekta. - Backend dobija rutu,
POST /api/summarise, koja čitaprocess.env.OPENAI_API_KEY, provjerava da je korisnik prijavljen i poziva provajdera. - Dugme poziva vašu rutu, a ne provajdera. Preglednik nikada ne vidi ključ.
- Istu tajnu dodate u postavke objavljene aplikacije i ponovo objavite, pa i živi sajt ima ključ.
Taj obrazac — preglednik poziva vaš server, a server čuva ključ i poziva servis — važi za plaćanja, e-poštu, mape i svaki drugi plaćeni API. Vodič o korištenju LLM API-ja detaljnije obrađuje AI slučaj.
Ključni pojmovi
- Fajl
.env: tekstualni fajl s redovimaNAZIV=vrijednost, koji se koristi u lokalnom razvoju. Dodajte ga u.gitignoreda se ne bi commit-ovao. .env.example: kopija s nazivima ali bez pravih vrijednosti, koja se commit-uje da drugi znaju koje varijable treba postaviti.- Rotirati: zamijeniti tajnu novom i opozvati staru.
- Opseg / dozvole: mnogi provajderi dozvoljavaju ključeve koji smiju samo određene stvari. Ključ koji može samo slati e-poštu manje je opasan od onog koji može sve.
- Testni i živi ključevi: provajderi poput Stripe-a daju odvojene ključeve za testiranje i za stvarni novac. Koristite testne ključeve dok ne lansirate.
- Tajna za potpisivanje: tajna kojom se provjerava da je poruka, npr. webhook, zaista stigla od pošiljaoca.
Česte greške i pogrešna shvatanja
- „Repozitorij je privatan, pa su ključevi u njemu u redu.” Privatni repozitoriji se dijele, forkuju, izvoze i kloniraju na laptopove. Ključevi tamo ne pripadaju. Ako povežete projekat s GitHub-om, provjerite da nijedan
.envfajl nije uključen. - „Obrisao sam ga, znači da nema.” Git čuva historiju, a logovi chata čuvaju poruke. Ako je ključ ikada bio izložen, rotirajte ga.
- Javni prefiks na tajni.
VITE_OPENAI_KEYstavlja vaš ključ u paket koji se šalje pregledniku. - Zaboravljen ponovni deploy. Promjena varijable u postavkama obično stupa na snagu tek kada se aplikacija ponovo pokrene ili ponovo objavi.
- Jedan ključ za sve. Odvojeni ključevi za testiranje i za produkciju, te po aplikaciji, omogućavaju da opozovete jedan bez rušenja ostalih.
- Bez ograničenja potrošnje. Za plaćene API-je postavite budžet ili limit u kontrolnoj tabli provajdera, za slučaj da ključ procuri.
Šta tražiti od AI graditelja
- „Pročitaj Stripe tajni ključ iz varijable okruženja
STRIPE_SECRET_KEY. Koristi ga samo na serveru.” - „Pobrini se da se nijedna tajna ne koristi u kodu na klijentskoj strani i da nema prefiks
VITE_iliNEXT_PUBLIC_.” - „Napravi
.env.examplesa svim varijablama koje aplikacija treba, bez vrijednosti, i provjeri da je.envu.gitignore.” - „Provjeri izgrađene frontend fajlove za bilo koji string koji liči na API ključ.”
Naša sigurnosna lista za aplikacije izgrađene uz AI pokriva tajne zajedno s drugim provjerama koje vrijedi uraditi prije lansiranja.
Tajne na Mythex-u
Na Mythex-u su tajne varijable okruženja projekta koje se ubacuju i u preview sandbox i u vašu objavljenu aplikaciju. Dodajete ih pod project settings → Secrets ili naredbom /secrets u chatu. Kada agent treba ključ, u chatu prikaže karticu za tajne, pa se vrijednost unosi u polje forme, a ne u tekst razgovora. Ako promijenite tajnu za živu aplikaciju, ponovo je objavite da deploy preuzme novu vrijednost. Izvozi projekta ne uključuju tajne, a uvezeni .env fajlovi se čiste, pa ih ponovo dodajete u postavkama. Pogledajte varijable okruženja i tajne i tajne u chatu u dokumentaciji.
Pitanja
Šta je varijabla okruženja?
Varijabla okruženja je imenovana postavka, kao što su STRIPE_SECRET_KEY ili DATABASE_URL, koja se programu predaje pri pokretanju umjesto da bude upisana u njegov kod. Isti kod tada može koristiti različite vrijednosti u razvoju i u produkciji.
Po čemu se varijabla okruženja razlikuje od tajne?
Tajna je varijabla okruženja čija vrijednost mora ostati privatna, poput API ključa, lozinke za bazu ili ključa za potpisivanje webhook-a. Ostale varijable okruženja, poput naziva sajta ili prekidača funkcije, mogu biti javne.
Da li je sigurno staviti API ključeve u frontend?
Nije. Sve što je u frontend kodu preuzima preglednik svakog posjetioca i može se pročitati. Tajni ključevi smiju se koristiti samo na serveru, a preglednik treba da poziva vaš server, koji zatim poziva servis.
Šta da uradim ako mi procuri API ključ?
Odmah ga opozovite ili rotirajte kod provajdera, napravite novi, ažurirajte ga tamo gdje vaša aplikacija čuva tajne i ponovo objavite aplikaciju. Brisanje ključa iz koda ili historije razgovora nije dovoljno, jer kopije možda već postoje.