Mik azok a környezeti változók és titkok? Érthető útmutató
Egy környezeti változó egy elnevezett beállítás — például a DATABASE_URL vagy a STRIPE_SECRET_KEY —, amelyet az alkalmazásodnak a futtatáskor adnak át, ahelyett hogy a kódba írnák. A titok olyan környezeti változó, amelynek értékét privátan kell tartani: egy API-kulcs, egy jelszó, egy aláíró kulcs. Ha ezeket az értékeket a kódon kívül tartjuk, az alkalmazást a kód szerkesztése nélkül is át lehet állítani, a teszteléshez és az éles ügyfelekhez más-más értékek használhatók, és nem szivárognak ki, amikor megosztjuk vagy közzétesszük a kódot.
Miért fontos ez, ha MI-val építesz
Amint az alkalmazásod valami hasznosat tesz egy másik szolgáltatással — fizetést fogad, e-mailt küld, MI-modellt hív —, szüksége lesz egy kulcsra. Az MI-alkalmazás-építők rendszeresen kérnek ilyen kulcsokat, és az dönti el, hogy az alkalmazás biztonságos-e, hogy a kulcs hova kerül.
Az MI-vel épített alkalmazásoknál két dolog gyakran félremegy:
- A kulcsot beillesztik a csetbe vagy a kódba. Ekkor a csetelőzményben, a projektfájlokban és minden exportban vagy tárolóban ott marad. Aki látja, használhatja a fiókodat.
- A kulcsot a böngészőben használják. Ha a Stripe-ot vagy az OpenAI-t hívó kód az oldalon fut, a kulcs minden látogatóhoz eljut. Az emberek néznek, az automata szkennerek pedig folyamatosan keresik a kiszivárgott kulcsokat.
A környezeti változók megértése segít mindkettőt felismerni, és a javítást is pontosan kérni.
Mindennapi hasonlat: a szállodai széf
Az alkalmazásod kódja olyan, mint a szobánk. A vendégek (és a takarítók, meg mindenki, akinek kulcskártyát adtál) sétálnak benne. Az útleveled sem hagynád az asztalon.
A környezeti változók a szobai széfhez hasonlítanak. A szoba tudja, hogy van széf, és azt is, hogyan kell kinyitni, ha szükséges, de az útlevél nincs kint. És ha másik szobába költözöl — a teszt-beállításból az éles oldalra —, egy másik útlevelet teszel a széfbe, a berendezést nem kell átalakítani.
Hogyan működik
A kódod egy nevet hivatkoz, nem egy értéket. Szerveren, JavaScriptben ez így néz ki: process.env.STRIPE_SECRET_KEY. Amikor az alkalmazás elindul, a futtató platform kitölti az értéket ehhez a névhez. Ha megváltoztatod az értéket a platform beállításai között, és újraindítod vagy újra telepíted, az alkalmazás az új értéket használja — kódmódosítás nélkül.
Az értékek forrása attól függ, hol fut az alkalmazás:
| Hol fut | Hol tárolódnak az értékek |
|---|---|
| Fejlesztő laptopján | Egy helyi fájl, általában .env néven, amelyet soha nem szabad a gitbe commitolni |
| MI-építő előnézetében | A projekt titkok vagy beállítások panelje |
| Tárhelyszolgáltatón | Az adott platform környezeti változó beállításai |
| GitHub Actionsben vagy más automatizálásban | A szolgáltatás saját, titkosított tárolója |
Nyilvános és titkos változók
Nem minden környezeti változó titkos. Érdemes két csoportba sorolni őket:
| Típus | Példák | Láthatja a böngésző? |
|---|---|---|
| Nyilvános konfiguráció | Webhely neve, nyilvános analitikai azonosító, Stripe publikálható kulcs, funkciókapcsolók | Igen, ez rendben van |
| Titkok | Stripe titkos kulcs, OpenAI- vagy Anthropic API-kulcs, adatbázis-kapcsolati string, e-mail-szolgáltatói kulcs, webhook aláíró kulcs | Soha |
A webes keretrendszerek ezt a felosztást kifejezetten jelölik. A Vite-ban csak a VITE_ előtagú változók kerülnek a böngészőkódba; a Next.js-ben az előtag NEXT_PUBLIC_. Ez biztonsági funkció: minden ilyen előtagú adat bekerül a látogatók által letöltött fájlokba, ezért titkot soha nem szabad ilyen előtaggal ellátni.
Kidolgozott példa: egy MI-összefoglaló gomb
Egy „Jegyzet összefoglalása” gombot szeretnél, amely egy MI-modellt hív.
A nem biztonságos változat: a gomb kódja, a böngészőben futva, közvetlenül hívja az MI-szolgáltatót, a kulcsot pedig beleírva. Az előnézetben működik. Ez azt is jelenti, hogy bárki megnyithatja a böngésző fejlesztői eszközeit, kimásolhatja a kulcsot, és a te fiókodra terhelheti a számlát.
A biztonságos változat:
- Létrehozod a kulcsot az MI-szolgáltatónál, és titokként mented a projektbeállításaidban, például
OPENAI_API_KEYnéven (vagy hasonlóan). - A backendben lesz egy útvonal,
POST /api/summarise, amely beolvassa aprocess.env.OPENAI_API_KEYértékét, ellenőrzi, hogy a felhasználó be van-e jelentkezve, majd hívja a szolgáltatót. - A gomb a te útvonaladat hívja, nem a szolgáltatót. A böngésző soha nem látja a kulcsot.
- Ugyanezt a titkot hozzáadod a közzétett alkalmazás beállításaihoz, és újra telepíted, hogy az élő oldal is megkapja.
Ez a minta — a böngésző a saját szervereddel beszél, a szervered tartja a kulcsot, és hívja a szolgáltatást — fizetésekre, e-mailre, térképekre és minden más fizetős API esetén is érvényes. Az LLM API-k használatáról szóló útmutató mélyebben tárgyalja az MI-esetet.
Fontos kifejezések
.envfájl:NÉV=értéksorokból álló szöveges fájl, helyi fejlesztéshez. Vedd fel a.gitignorefájlba, hogy ne kerüljön commitolásra..env.example: másolat a nevekkel, de valódi értékek nélkül; commitolva, hogy mások tudják, mely változókat kell beállítaniuk.- Rotálás: egy titok lecserélése újra, és a régi visszavonása.
- Hatókör / jogosultságok: sok szolgáltató engedi, hogy csak bizonyos műveletekre szóló kulcsokat hozz létre. Az a kulcs, amely csak e-mailt tud küldeni, kevésbé veszélyes, mint az, amelyik mindent megtehet.
- Teszt- és éles kulcsok: a szolgáltatók, mint a Stripe, külön kulcsokat adnak a teszteléshez és a valódi pénzmozgáshoz. Az indulásig teszt kulcsokat használj.
- Aláíró titok: olyan titok, amellyel ellenőrizhető, hogy egy üzenet, például egy webhook, valóban a küldőtől érkezett.
Gyakori hibák és tévhitek
- „A repó privát, tehát a kulcsok benne rendben vannak.” A privát repókat is megosztják, forkolják, exportálják és laptopokra klónozzák. A kulcsoknak ott sincs helyük. Ha a projektet GitHubhoz kapcsolod, ellenőrizd, hogy nincs-e benne
.envfájl. - „Töröltem, tehát nincs többé.” A git megőrzi az előzményeket, a csetnaplók pedig az üzeneteket. Ha egy kulcs egyszer kiszivárgott, rotáld.
- Nyilvános előtag titokra. A
VITE_OPENAI_KEYa kulcsodat a böngészőcsomagba teszi. - Az újratelepítés elfelejtése. Egy változó módosítása a beállításokban általában csak az alkalmazás újraindítása vagy újbóli közzététele után lép életbe.
- Egy kulcs mindenre. A teszthez és az élőhöz, valamint alkalmazásonként külön kulcsok lehetővé teszik, hogy egyet visszavonj anélkül, hogy a többit megtörnéd.
- Nincs költségkorlát. Fizetős API-knál állíts be keretet vagy limitet a szolgáltató irányítópultján, arra az esetre, ha a kulcs kiszivárogna.
Mit kérj az MI-építődtől
- „Olvasd be a Stripe titkos kulcsát a
STRIPE_SECRET_KEYnevű környezeti változóból. Csak a szerveren használd.” - „Gondoskodj róla, hogy egyetlen titok se legyen kliensoldali kódban, és ne kapjon
VITE_vagyNEXT_PUBLIC_előtagot.” - „Készíts
.env.examplefájlt, amely felsorolja az alkalmazáshoz szükséges összes változót érték nélkül, és gondoskodj róla, hogy a.envgit-ignorált legyen.” - „Nézd át a lefordított frontend fájlokat, nincs-e bennük API-kulcsra hasonlító szöveg.”
Az AI-val épített alkalmazások biztonsági ellenőrzőlistája a titkokat a többi, indulás előtti ellenőrzéssel együtt tárgyalja.
Titkok a Mythexen
A Mythexen a titkok olyan projekt-környezeti változók, amelyek bekerülnek mind az előnézeti homokozóba, mind a közzétett alkalmazásodba. A projektbeállítások → Titkok menüpontban vagy a csetben a /secrets paranccsal adhatod hozzá őket. Ha az ügynöknek kulcsra van szüksége, a csetben titokkártyát mutat, így az érték egy beviteli mezőbe kerül, nem a beszélgetésbe. Ha egy élő alkalmazás titkát módosítod, publikálj újra, hogy a telepítés átvegye. A projektexportok nem tartalmazzák a titkokat, az importált .env fájlokból pedig a titkok törlődnek, így a beállításokban kell újra felvenned őket. Lásd a környezeti változók és titkok és a titkok a csetben oldalakat a dokumentációban.
Kérdések
Mi az a környezeti változó?
A környezeti változó egy elnevezett beállítás, például a STRIPE_SECRET_KEY vagy a DATABASE_URL, amelyet a program futtatáskor kap meg, ahelyett hogy a kódjába írnák. Ugyanaz a kód így fejlesztésben és éles üzemben más-más értékeket használhat.
Mi a különbség a környezeti változó és a titok között?
A titok olyan környezeti változó, amelynek értékét privátan kell tartani, például egy API-kulcs, egy adatbázis-jelszó vagy egy webhook aláíró kulcs. A többi környezeti változó, például a webhely neve vagy egy funkciókapcsoló, nyilvános lehet.
Biztonságos az API-kulcsokat a frontendbe tenni?
Nem. A frontend kódja minden látogató böngészőjébe letöltődik, és onnan bárki kiolvashatja. A titkos kulcsokat csak a szerveren szabad használni, a böngészőnek pedig a saját szerveredet kell hívnia, amely aztán hívja a szolgáltatót.
Mit tegyek, ha kiszivárgott az API-kulcsom?
Azonnal vond vissza vagy rotáld a kulcsot a szolgáltatónál, hozz létre újat, frissítsd mindenhol, ahol az alkalmazásod titkokat tárol, és telepítsd újra. Nem elég a kulcsot törölni a kódodból vagy a csetelőzményekből, mert lehetnek már másolatai.