Kā drošībā glabāt API atslēgas savā lietotnē
Lai drošībā glabātu API atslēgas, glabājiet tās kā noslēpumus vai vides mainīgos savā hostingā, lietojiet tās tikai servera puses kodā un nekad neielieciet tās čatā, koda failos, ekrānuzņēmumos vai Git repozitorijā. Katrai atslēgai piešķiriet minimālās nepieciešamās tiesības, iestatiet izdevumu ierobežojumus pakalpojumu sniedzējā, un, ja atslēga jebkad noplūst, rotējiet to — izveidojiet jaunu un dzēsiet veco —, nevis tikai paslēpiet, kur tā parādījās.
API atslēga ir paroles analogs pakalpojumam. Jūsu OpenAI atslēga ļauj kādam tērēt jūsu naudu AI; jūsu Stripe slepenā atslēga ļauj izdarīt atmaksas; jūsu e-pasta pakalpojumu sniedzēja atslēga ļauj sūtīt pastu jūsu vārdā. AI lietotņu veidotāji labi spēj tās iestrādāt, bet ne vienmēr ir uzmanīgi par to, kur tās nonāk, tāpēc šis ceļvedis parāda, kā tās drošībā turēt un kā pārbaudīt.
Publiskas atslēgas pret slepenajām atslēgām
Ne katra atslēga ir slepena. Zinot atšķirību, jūs nepanikosiet par nepareizo un neignorēsiet pareizo.
| Veids | Piemēri | Vai drīkst būt pārlūkā? |
|---|---|---|
| Publishable / publiskās atslēgas | Stripe pk_… atslēga, karšu atslēga, kas ierobežota ar jūsu domēnu, daži analītikas ID | Jā — tās tam paredzētas |
| Slepenās atslēgas | Stripe sk_…, OpenAI un Anthropic atslēgas, e-pasta pakalpojumu atslēgas, datubāzu paroles | Nekad |
| Servisa/administratora atslēgas | Atslēgas, kas apiet piekļuves noteikumus mitinātā datubāzē | Nekad — uzskatiet par visjutīgākajām |
Ja neesat pārliecināts, kāda veida atslēga tā ir, pārbaudiet pakalpojuma sniedzēja dokumentāciju. Šaubu gadījumā uzskatiet to par slepenu.
1. solis: glabājiet atslēgas kā noslēpumus, nevis kodā
Atslēgas pieder jūsu hostinga vides mainīgajiem vai noslēpumu iestatījumiem. Jūsu kods tās nolasa pēc nosaukuma izpildes laikā (piemēram, process.env.OPENAI_API_KEY), tāpēc vērtība nekad neparādās jūsu failos. Pamatinformāciju skatiet kas ir vides mainīgie un noslēpumi.
Pārvietojiet katru API atslēgu no koda uz vides mainīgajiem. Uzskaitiet katru atslēgu, kurā failā tā bija un kādu mainīgā nosaukumu izmantojāt. Nerādiet man vērtības.
Tad pārbaudiet, ka nekas nav palicis:
Pārmeklē visu projektu, ieskaitot konfigurācijas failus un visus .env failus, meklējot kaut ko, kas izskatās pēc API atslēgas vai paroles. Ziņo failu un rindu, nevis vērtību.
2. solis: lietojiet slepenās atslēgas tikai serverī
Tas ir noteikums, kam ir vislielākā nozīme. Viss, ko saņem pārlūks, apmeklētājs var izlasīt — lapas avots un JavaScript faili ir redzami izstrādātāju rīkos.
Tātad, ja lietotnei jāizsauc OpenAI, pārlūkam jāizsauc jūsu serveris, un jūsu serveris izsauc OpenAI ar atslēgu. Atslēga nekad neatstāj serveri.
Tērzēšanas funkcija tieši no pārlūka izsauc OpenAI. Pārvietojiet šo izsaukumu uz servera API maršrutu, kas nolasa OPENAI_API_KEY no vides. Pārlūkam jāizsauc tikai mūsu maršruts. Prasiet pieteikšanos maršrutam.
Izvairieties no vienas biežas kļūmes frontend ietvaros: mainīgie ar publisku priedēkli — VITE_ Vite, NEXT_PUBLIC_ Next.js — tiek ievietoti pārlūka kodā tīši. Slepena atslēga ar vienu no šiem priedēkļiem ir atklāta, lai arī tā atrodas „vides mainīgajā“.
3. solis: pārbaudiet, ka nekas nenoplūst
Nepaļaujieties, ka tas strādāja — pārbaudiet dzīvo vietni:
- Atveriet publicēto lietotni pārlūkā.
- Atveriet izstrādātāju rīkus un cilni Sources vai Network.
- Meklējiet failos katras slepenās atslēgas pirmās rakstzīmes (piemēram,
sk_vaisk-). - Pārbaudiet tīkla pieprasījumus, ko lietotne veic. Pieprasījums, kas iet tieši no pārlūka uz maksas AI pakalpojumu sniedzēju, ir brīdinājuma signāls.
Ja atrodat slepenu atslēgu, pārvietojiet to uz serveri (2. solis) un rotējiet (6. solis), jo tā jau bija publiska.
4. solis: ierobežojiet, ko katra atslēga var darīt
Daudzi pakalpojumu sniedzēji ļauj atslēgu ierobežot:
- Ierobežotas vai atsevišķas atslēgas, kas var darīt tikai to, kas jūsu lietotnei vajadzīgs. Piemēram, Stripe atbalsta ierobežotas atslēgas ar konkrētām tiesībām.
- Domēna vai IP ierobežojumi atslēgām, kurām jābūt publiskām, piemēram, karšu atslēgām.
- Atsevišķas atslēgas katrai lietotnei un videi, lai viens noplūdums neatklātu visu un viena atsaukšana nesalauztu citas.
- Testa atslēgas izstrādes laikā un dzīvās atslēgas tikai publicētajā lietotnē.
5. solis: ierobežojiet kaitējumu
Pat labi aizsargātu atslēgu var ļaunprātīgi izmantot caur jūsu pašu lietotni — piemēram, kāds skriptā izsauc jūsu AI funkciju tūkstošiem reižu.
- Iestatiet izdevumu ierobežojumus vai brīdinājumus katrā maksas pakalpojumu sniedzējā.
- Prasiet pieteikšanos katrai funkcijai, kas maksā par katru izsaukumu.
- Pievienojiet ātruma ierobežojumu katram lietotājam. Skatiet kas ir ātruma ierobežošana.
Pievienojiet ierobežojumu — 30 AI pieprasījumi vienam lietotājam stundā uz /api/chat. Kad ierobežojums sasniegts, atgrieziet skaidru ziņu. Noraidiet pieprasījumus no lietotājiem, kuri nav pieteikušies.
6. solis: rotējiet atslēgas, kas noplūst
Ja slepena atslēga parādās vietā, kur nevajadzētu — čata ziņā, commit, ekrānuzņēmumā, atbalsta biļetē, pārlūka kodā —, pieņemiet, ka tā ir apdraudēta.
- Izveidojiet jaunu atslēgu pakalpojumu sniedzējā.
- Atjauniniet noslēpumu savas lietotnes iestatījumos.
- Izvietojiet vai publicējiet vēlreiz, lai dzīvā lietotne izmantotu jauno atslēgu.
- Dzēsiet veco atslēgu pakalpojumu sniedzējā.
- Pārbaudiet pakalpojuma sniedzēja lietojuma žurnālus, vai nav aktivitātes, ko neatpazīstat.
Čata ziņas vai Git commit dzēšana nepietiek. Git vēsture saglabā vecās versijas, un viss publiski redzamais jau var būt nokopēts.
Biežākās kļūdas
- Atslēgas ielīmēšana uzvednē. Tā tagad ir čata vēsturē. Izmantojiet noslēpumu formu.
- Publisks priedēklis slepenam mainīgajam.
VITE_OPENAI_API_KEYnosūta atslēgu katram apmeklētājam. .envfaila iekļaušana commit. Pārliecinieties, ka tas ir.gitignorepirms pirmās nosūtīšanas.- Viena atslēga visur. Lietojiet atsevišķas atslēgas testam un dzīvajam režīmam un katrai lietotnei.
- Nav izdevumu ierobežojuma. Noplūdusi vai ļaunprātīgi izmantota atslēga bez ierobežojuma var radīt lielu rēķinu, pirms to pamanāt.
- Paslēpt, nevis rotēt. Kad atslēga ir atklāta, tikai jauna atslēga to labo.
- Atslēgas ekrānuzņēmumos. Apgrieziet vai aizmiglojiet iestatījumu lapas, pirms tās dalāties palīdzībai.
Kontrolsaraksts
- Katra atslēga glabājas kā noslēpums vai vides mainīgais, nevis kodā.
- Neviens .env fails vai atslēga nav iekļauta Git commit.
- Slepenās atslēgas tiek lietotas tikai servera puses kodā.
- Neviens slepenais mainīgais neizmanto publisku priedēkli, piemēram,
VITE_vaiNEXT_PUBLIC_. - Esmu pārmeklējis dzīvās vietnes JavaScript katras atslēgas priedēkli un neko neatradis.
- Atslēgas ir ierobežotas, kur pakalpojumu sniedzējs to atļauj.
- Testa un dzīvās atslēgas ir atsevišķas.
- Maksas funkcijām nepieciešama pieteikšanās un ierobežojumi katram lietotājam.
- Katram maksas pakalpojumu sniedzējam ir izdevumu griesti vai brīdinājums.
- Zinu, kā rotēt katru atslēgu, un jebkura atklāta atslēga ir rotēta.
Atslēgu drošība Mythex
Mythex atslēgas tur ārpus jūsu koda un čata divos veidos:
- Noslēpumu pieprasījuma kartīte. Kad aģentam vajag atslēgu, tas čatā parāda kartīti, kur jūs ievadāt vērtību formas laukos, nevis ziņu lodziņā, un tā tiek saglabāta kā projekta noslēpums. Skatiet Noslēpumi čatā.
- Projekta iestatījumi → Noslēpumi vai
/secretsčatā, lai pats pievienotu vai mainītu atslēgas. Skatiet Vides mainīgie un noslēpumi.
Pēc noslēpuma maiņas publicētai lietotnei publicējiet vēlreiz, lai dzīvā lietotne to paņemtu. Eksportētie projekti neietver noslēpumus, tāpēc pievienojiet tos atkārtoti, kur vien tālāk izpildāt kodu. Ja atslēga kādreiz parādās čatā, rotējiet to pie pakalpojuma sniedzēja.
Pārējai pirmslaišanas drošības pārbaudei izejiet cauri drošības kontrolsarakstam AI veidotām lietotnēm. Ja pievienojat AI funkcijas, kā izmantot LLM API detalizētāk aptver atslēgas un izmaksas.
Jautājumi
Vai ir droši ievietot API atslēgu frontend kodā?
Tikai tad, ja pakalpojumu sniedzējs šo atslēgu paredzējis publiskai lietošanai, piemēram, Stripe publishable atslēgu vai karšu atslēgu, kas ierobežota ar jūsu domēnu. Jebkurai atslēgai, ar ko var tērēt naudu vai lasīt privātus datus, jāpaliek serverī, jo viss, kas nosūtīts pārlūkam, ir lasāms ikvienam.
Ko darīt, ja API atslēgu ievietoju čatā vai publiskā repozitorijā?
Rotējiet to: izveidojiet jaunu atslēgu pakalpojumu sniedzējā, atjauniniet savas lietotnes noslēpumus, publicējiet vēlreiz un pēc tam dzēsiet veco atslēgu. Ziņas vai commit dzēšana nepietiek, jo kopijas jau var būt izveidotas.
Kur glabāt API atslēgas?
Sava hostinga vides mainīgajos vai noslēpumu iestatījumos, ko servera puses kods nolasa izpildes laikā. Tās nedrīkst ierakstīt pirmkodā, iekļaut Git commit vai ekrānuzņēmumos.
Kā pārbaudīt, vai mana API atslēga ir atklāta vietnē?
Atveriet savu dzīvo vietni, skatiet lapas avotu un JavaScript failus pārlūka izstrādātāju rīkos un meklējiet atslēgas sākumu. Ja tā parādās, tā ir atklāta un jāpārceļ uz serveri un jārotē.