Kuidas hoida API-võtmed oma rakenduses turvaliselt
API-võtmete turvaliseks hoidmiseks salvesta need oma hostimisteenuses saladustena või keskkonnamuutujatena, kasuta neid ainult serveripoolses koodis ning ära kunagi kleebi neid vestlusse, koodifailidesse, ekraanipiltidele ega Giti repositooriumisse. Anna igale võtmele vähim vajalik õigus, sea pakkuja juures kulupiirangud ja kui võti kunagi lekib, vaheta see välja — loo uus ja kustuta vana — selle asemel, et lihtsalt peita, kus see ilmus.
API-võti on teenuse parool. Sinu OpenAI võti laseb kellelgi kulutada su raha AI peale; sinu Stripe'i salajane võti laseb tagasimakseid teha; sinu e-posti teenusepakkuja võti laseb kellelgi saata kirju sinu nimel. AI-rakenduste ehitajad oskavad neid hästi ühendada, kuid ei ole alati ettevaatlikud selle suhtes, kuhu need lõpuks jõuavad. Seetõttu käsitleb see juhend, kuidas neid turvaliselt hoida ja kuidas kontrollida.
Avalikud ja salajased võtmed
Kõik võtmed ei ole salajased. Erinevuse teadmine hoiab sind ära valest võtmest paanikasse sattumast ja õige ignoreerimast.
| Tüüp | Näited | Kas võib olla brauseris? |
|---|---|---|
| Avaldatavad / avalikud võtmed | Stripe'i pk_… võti, domeeniga piiratud kaardivõti, mõned analüütika ID-d | Jah — selleks need on loodud |
| Salajased võtmed | Stripe'i sk_…, OpenAI ja Anthropicu võtmed, e-posti teenusepakkuja võtmed, andmebaasi paroolid | Mitte kunagi |
| Teenuse- või administraatorivõtmed | Võtmed, mis mööduvad hostitud andmebaasi ligipääsureeglitest | Mitte kunagi — käsitle neid kui kõige tundlikumaid |
Kui sa ei ole kindel, millist tüüpi võti on, vaata pakkuja dokumentatsiooni. Kahtluse korral käsitle seda kui salajast.
Samm 1: hoia võtmed saladustena, mitte koodis
Võtmed kuuluvad sinu hostimisteenuse keskkonnamuutujate või saladuste seadetesse. Su kood loeb neid nime järgi käitamisel (näiteks process.env.OPENAI_API_KEY), nii et väärtus ei ilmu kunagi su failidesse. Taustast loe lähemalt: mis on keskkonnamuutujad ja saladused.
Liiguta iga API-võti koodist keskkonnamuutujatesse. Loetle iga leitud võti, fail, kus see oli, ja kasutatud muutuja nimi. Ära näita väärtusi.
Seejärel kontrolli, et midagi ei jääks alles:
Otsi kogu projektist, sealhulgas seadistusfailidest ja kõigist .env failidest, kõike, mis näeb välja nagu API-võti või parool. Teata fail ja rida, mitte väärtust.
Samm 2: kasuta salajasi võtmeid ainult serveris
See on kõige olulisem reegel. Kõik, mida brauser saab, on külastajale loetav — lähtekood ja JavaScripti failid on arendajatööriistades nähtavad.
Seega, kui rakendus peab kutsuma OpenAI-d, peaks brauser kutsuma sinu serverit ja su server kutsub OpenAI-d võtmega. Võti ei lahku kunagi serverist.
Vestlusfunktsioon kutsub OpenAI-d otse brauserist. Liiguta see kõne serveri API marsruuti, mis loeb OPENAI_API_KEY keskkonnast. Brauser peaks kutsuma ainult meie marsruuti. Nõua marsruudi jaoks sisselogimist.
Jälgi ühte levinud lõksu frontendi raamistikes: avaliku prefiksiga muutujad — VITE_ Vite'is, NEXT_PUBLIC_ Next.js-is — lisatakse brauseri koodi tahtlikult. Salajane võti selle prefiksiga muutujas on avalik, isegi kui see on „keskkonnamuutujas“.
Samm 3: testi, et midagi ei leki
Ära usalda, et see töötas — kontrolli elavat saiti:
- Ava avaldatud rakendus brauseris.
- Ava arendajatööriistad ja seejärel vahekaart Sources või Network.
- Otsi failidest iga salajase võtme esimesi tähemärke (näiteks
sk_võisk-). - Vaata rakenduse võrgupäringuid. Päring, mis läheb otse brauserist tasulisele AI-pakkujale, on punane lipp.
Kui leiad salajase võtme, liiguta see serverisse (samm 2) ja vaheta see välja (samm 6), sest see oli juba avalik.
Samm 4: piira, mida iga võti teha saab
Paljud pakkujad võimaldavad võtit piirata:
- Piiratud võtmed, mis saavad teha ainult seda, mida su rakendus vajab. Näiteks Stripe toetab piiratud võtmeid konkreetsete õigustega.
- Domeeni- või IP-piirangud võtmetele, mis peavad olema avalikud, näiteks kaardivõtmed.
- Eraldi võtmed rakenduse ja keskkonna kohta, nii et üks leke ei avalda kõike ja ühe tühistamine ei katkesta teisi.
- Testvõtmed ehitamise ajal ja elavad võtmed ainult avaldatud rakenduses.
Samm 5: pane kahjule lagi
Isegi hästi kaitstud võtit saab valesti kasutada läbi sinu enda rakenduse — näiteks keegi skripteerib su AI-funktsiooni tuhandeid kordi.
- Sea kulupiirangud või teavitused igas tasulises teenuses.
- Nõua sisselogimist igal funktsioonil, mis maksab iga kõne eest.
- Lisa kasutajapõhine päringupiirang. Vaata mis on päringupiirang.
Lisa piirang 30 AI-päringut kasutaja kohta tunnis marsruudile /api/chat. Kui piir saavutatakse, tagasta selge teade. Lükka tagasi päringud kasutajatelt, kes ei ole sisse logitud.
Samm 6: vaheta välja lekkinud võtmed
Kui salajane võti ilmub kohta, kuhu see ei peaks jõudma — vestlussõnum, commit, ekraanipilt, toepiletid, brauseri kood —, oleta, et see on kompromiteeritud.
- Loo pakkujal uus võti.
- Uuenda saladust oma rakenduse seadetes.
- Paiguta või avalda uuesti, et elav rakendus kasutaks uut võtit.
- Kustuta pakkujal vana võti.
- Kontrolli pakkuja kasutuslogisid tegevuse suhtes, mida sa ei tunne ära.
Vestlussõnumi või Giti commit'i kustutamine ei piisa. Giti ajalugu hoiab vanu versioone ja kõike avalikku on võidud juba kopeerida.
Levinud vead
- Võtme kleepimine promptisse. See on nüüd vestluse ajaloos. Kasuta selle asemel saladuste vormi.
- Avalik prefiks salajasel muutujal.
VITE_OPENAI_API_KEYsaadab võtme igale külastajale. - .env faili commit'imine. Veendu, et see on
.gitignore'is enne esimest push'i. - Üks võti igal pool. Kasuta eraldi võtmeid testimiseks ja elavaks kasutuseks ning iga rakenduse jaoks.
- Kulupiirangu puudumine. Lekkinud või kuritarvitatud võti ilma piirita võib suure arve tekitada, enne kui märkad.
- Peitmine vahetamise asemel. Kui võti on avalikuks saanud, parandab selle ainult uus võti.
- Võtmed ekraanipiltidel. Kärbi või hägusta seadete lehti enne nende jagamist abi saamiseks.
Kontrollnimekiri
- Iga võti on salvestatud saladuse või keskkonnamuutujana, mitte koodis.
- Ühtegi .env faili ega võtit ei ole Giti commit'itud.
- Salajasi võtmeid kasutatakse ainult serveripoolses koodis.
- Ükski salajane muutuja ei kasuta avalikku prefiksit nagu
VITE_võiNEXT_PUBLIC_. - Otsisin elava saidi JavaScripti iga võtme prefiksi järgi ega leidnud midagi.
- Võtmed on piiratud seal, kus pakkuja seda lubab.
- Testvõtmed ja elavad võtmed on eraldi.
- Tasulised funktsioonid nõuavad sisselogimist ja neil on kasutajapõhised piirangud.
- Igal tasulisel pakkujal on kulupiirang või teavitus.
- Ma tean, kuidas iga võtit vahetada, ja iga kunagi avalikuks saanud võti on vahetatud.
Võtmete hoidmine Mythexis
Mythex hoiab võtmed sinu koodist ja vestlusest väljas kahel viisil:
- Saladuste päringu kaart. Kui agent vajab võtit, kuvab ta vestluses kaardi, kuhu sisestad väärtuse vormi väljadele, mitte sõnumikasti, ja see salvestatakse projekti saladusena. Vaata Saladused vestluses.
- Projekti seaded → Saladused või vestluses
/secrets, et lisada või muuta võtmeid ise. Vaata Keskkonnamuutujad ja saladused.
Pärast saladuse muutmist avaldatud rakenduses avalda uuesti, et elav rakendus selle kätte saaks. Eksporditud projektid jätavad saladused välja, seega lisa need uuesti, kus iganes koodi järgmiseks käitad. Kui võti kunagi ilmub vestluses, vaheta see pakkuja juures välja.
Ülejäänud enne käivitamist tehtava turvakontrolli jaoks vaata AI-ga ehitatud rakenduste turvakontrollnimekirja. Kui lisad AI-funktsioone, käsitleb kuidas kasutada LLM API-sid võtmeid ja kulusid põhjalikumalt.
Küsimused
Kas API-võtme panemine frontendi koodi on ohutu?
Ainult siis, kui pakkuja on selle võtme avalikuks mõeldud, näiteks Stripe'i avaldatav võti või kaardivõti, mis on piiratud sinu domeeniga. Iga võti, millega saab raha kulutada või privaatseid andmeid lugeda, peab jääma serverisse, sest kõik brauserisse saadetu on igaühele loetav.
Mida teha, kui kleepisin API-võtme vestlusesse või avalikku reposse?
Vaheta see välja: loo pakkujal uus võti, uuenda oma rakenduse saladusi, avalda uuesti ja kustuta siis vana võti. Sõnumi või commit'i kustutamine ei piisa, sest koopiad võivad juba olemas olla.
Kuhu API-võtmed peaks salvestama?
Sinu hostimisteenuse keskkonnamuutujatesse või saladuste seadetesse, mida serveripoolne kood käitamisel loeb. Neid ei tohi kirjutada lähtefailidesse, panna Giti ega lisada ekraanipiltidele.
Kuidas ma saan teada, kas mu API-võti on veebisaidil avalik?
Ava oma aktiivne sait, vaata lehe lähtekoodi ja brauseri arendajatööriistades JavaScripti faile ning otsi võtme algust. Kui see ilmub, on see avalik ja tuleb viia serverisse ning vahetada välja.