Vadovai

Kaip saugoti API raktus savo programėlėje

Norėdami saugoti API raktus, laikykite juos kaip paslaptis ar aplinkos kintamuosius savo hostinge, naudokite tik serverio pusės kode ir niekada neįklijuokite jų į pokalbį, kodo failus, ekrano nuotraukas ar Git repozitoriją. Kiekvienam raktui suteikite tik tiek leidimų, kiek jam reikia, nustatykite išlaidų ribas teikėjo sistemoje, o jei raktas kada nors nutekėjo, — pakeiskite jį: sukurkite naują ir ištrinkite senąjį, o ne tiesiog paslėpkite, kur jis atsirado.

API raktas yra paslaugos slaptažodis. Jūsų OpenAI raktas leidžia kam nors išleisti jūsų pinigus DI; jūsų Stripe slaptas raktas leidžia grąžinti pinigus; jūsų el. pašto teikėjo raktas leidžia siųsti laiškus jūsų vardu. DI programėlių kūrimo įrankiai gerai juos įjungia, bet ne visada atsargiai tikrina, kur jie patenka, todėl šis vadovas aptaria, kaip juos apsaugoti ir kaip tai patikrinti.

Vieši raktai ir slapti raktai

Ne kiekvienas raktas yra slaptas. Skirtumo žinojimas padeda nepanikuoti dėl neteisingo ir nepaisyti teisingo.

TipasPavyzdžiaiAr gali būti naršyklėje?
Publishable / vieši raktaiStripe pk_… raktas, žemėlapių raktas, apribotas jūsų domenui, kai kurie analitikos IDTaip — sukurti šiam tikslui
Slapti raktaiStripe sk_…, OpenAI ir Anthropic raktai, el. pašto teikėjų raktai, duomenų bazių slaptažodžiaiNiekada
Servisų / administratoriaus raktaiRaktai, apeinantys prieigos taisykles hostinguojamoje duomenų bazėjeNiekada — elkitės kaip su jautriausiais

Jei nesate tikri, kokio tipo raktas, patikrinkite teikėjo dokumentaciją. Jei abejojate, laikykite jį slaptu.

1 žingsnis: saugokite raktus kaip paslaptis, ne kode

Raktai priklauso jūsų hostingo aplinkos kintamiesiems ar paslapčių nustatymams. Jūsų kodas juos nuskaito pagal pavadinimą vykdymo metu (pavyzdžiui, process.env.OPENAI_API_KEY), todėl reikšmė niekada neatsiranda jūsų failuose. Bendrai apie tai žr. kas yra aplinkos kintamieji ir paslaptys.

Perkelkite kiekvieną API raktą iš kodo į aplinkos kintamuosius. Surašykite kiekvieną rastą raktą, failą, kuriame jis buvo, ir naudotą kintamojo pavadinimą. Nerodykite man reikšmių.

Tada patikrinkite, ar nieko nelikę:

Ieškokite visame projekte, įskaitant konfigūracijos failus ir visus .env failus, ko nors, kas atrodo kaip API raktas ar slaptažodis. Pateikite failą ir eilutę, o ne reikšmę.

2 žingsnis: naudokite slaptus raktus tik serveryje

Tai svarbiausia taisyklė. Viskas, ką gauna naršyklė, gali būti perskaityta lankytojo — puslapio šaltinis ir JavaScript failai matomi kūrėjo įrankiuose.

Todėl jei programėlei reikia kviesti OpenAI, naršyklė turėtų kviesti jūsų serverį, o jūsų serveris kviečia OpenAI su raktu. Raktas niekada nepalieka serverio.

Pokalbio funkcija tiesiogiai iš naršyklės kviečia OpenAI. Perkelkite tą kvietimą į serverio API maršrutą, kuris nuskaito OPENAI_API_KEY iš aplinkos. Naršyklė turėtų kviesti tik mūsų maršrutą. Maršrutui reikalaukite prisijungimo.

Atkreipkite dėmesį į dažną spąstą frontend karkasuose: kintamieji su viešu priešdėliu — VITE_ Vite, NEXT_PUBLIC_ Next.js — tyčia įdedami į naršyklės kodą. Slaptas raktas su vienu iš tų priešdėlių yra atviras, nors jis „yra aplinkos kintamajame“.

3 žingsnis: patikrinkite, kad nieko nenutekėtų

Nepasitikėkite, kad viskas veikia — patikrinkite veikiančią svetainę:

  1. Atidarykite paskelbtą programėlę naršyklėje.
  2. Atidarykite kūrėjo įrankius, tada skirtuką Sources arba Network.
  3. Ieškokite failuose pirmųjų kiekvieno slapto rakto simbolių (pavyzdžiui, sk_ arba sk-).
  4. Patikrinkite tinklo užklausas, kurias daro programėlė. Užklausa, einanti tiesiai iš naršyklės į mokamą DI teikėją, yra įspėjimo ženklas.

Jei rasite slaptą raktą, perkelkite jį į serverį (2 žingsnis) ir pakeiskite (6 žingsnis), nes jis jau buvo viešas.

4 žingsnis: apribokite, ką kiekvienas raktas gali daryti

Daugelis teikėjų leidžia apriboti raktą:

  • Apriboti raktai, kurie gali daryti tik tai, ko reikia jūsų programėlei. Pavyzdžiui, Stripe palaiko apribotus raktus su konkrečiais leidimais.
  • Domeno ar IP apribojimai raktams, kurie turi būti vieši, pavyzdžiui, žemėlapių raktams.
  • Atskiri raktai kiekvienai programėlei ir aplinkai, kad vienas nutekėjimas neatskleistų visko, o vieno panaikinimas nesugadintų kitų.
  • Testiniai raktai kuriant ir tikri raktai tik paskelbtoje programėlėje.

5 žingsnis: apribokite žalą

Net gerai apsaugotas raktas gali būti piktnaudžiaujamas per jūsų pačių programėlę — pavyzdžiui, kas nors scenarijumi tūkstančius kartų iškviečia jūsų DI funkciją.

  • Nustatykite išlaidų ribas ar įspėjimus kiekviename mokamame teikėjuje.
  • Reikalaukite prisijungimo kiekvienai funkcijai, kuri kainuoja pinigus už kvietimą.
  • Pridėkite greičio ribą vienam naudotojui. Žr. kas yra greičio ribojimas.

Pridėkite ribą 30 DI užklausų vienam naudotojui per valandą į /api/chat. Kai riba pasiekiama, grąžinkite aiškų pranešimą. Atmeskite užklausas iš naudotojų, kurie neprisijungę.

6 žingsnis: pakeiskite nutekėjusius raktus

Jei slaptas raktas atsirado ten, kur neturėtų — pokalbio žinutėje, commit, ekrano nuotraukoje, palaikymo bilete, naršyklės kode —, laikykite, kad jis kompromituotas.

  1. Teikėjo sistemoje sukurkite naują raktą.
  2. Atnaujinkite paslaptį savo programėlės nustatymuose.
  3. Iš naujo įdiekite arba paskelbkite, kad veikianti programėlė naudotų naują raktą.
  4. Teikėjo sistemoje ištrinkite senąjį raktą.
  5. Patikrinkite teikėjo naudojimo žurnalus, ar nėra veiklos, kurios neatpažįstate.

Vien pokalbio žinutės ar Git commit ištrynimo nepakanka. Git istorija saugo senas versijas, o viskas, kas buvo vieša, galėjo jau būti nukopijuota.

Dažnos klaidos

  • Rakto įklijavimas į raginimą. Dabar jis yra pokalbio istorijoje. Vietoj to naudokite paslapčių formą.
  • Viešas priešdėlis slaptame kintamajame. VITE_OPENAI_API_KEY atiduoda raktą kiekvienam lankytojui.
  • .env failo įkėlimas. Įsitikinkite, kad jis yra .gitignore prieš pirmą įkėlimą.
  • Vienas raktas visur. Naudokite atskirus raktus testui ir tikrai aplinkai bei kiekvienai programėlei.
  • Nėra išlaidų ribos. Nutekėjęs ar piktnaudžiaujamas raktas be ribos gali sukelti didelę sąskaitą, kol pastebėsite.
  • Slėpimas vietoj keitimo. Kai raktas kartą buvo atskleistas, tik naujas raktas tai ištaiso.
  • Raktai ekrano nuotraukose. Prieš siųsdami nuotraukas pagalbai, iškirpkite arba užtepkite nustatymų puslapius.

Kontrolinis sąrašas

  • Kiekvienas raktas saugomas kaip paslaptis ar aplinkos kintamasis, ne kode.
  • Jokie .env failai ar raktai neįkelti į Git.
  • Slapti raktai naudojami tik serverio pusės kode.
  • Jokia slapta reikšmė nenaudoja viešo priešdėlio, pavyzdžiui, VITE_ ar NEXT_PUBLIC_.
  • Patikrinau veikiančios svetainės JavaScript kiekvieno rakto priešdėlį ir nieko neradau.
  • Raktai apriboti, kai teikėjas tai leidžia.
  • Testiniai ir tikri raktai atskirti.
  • Mokamos funkcijos reikalauja prisijungimo ir turi ribas vienam naudotojui.
  • Kiekvienas mokamas teikėjas turi išlaidų ribą ar įspėjimą.
  • Žinau, kaip pakeisti kiekvieną raktą, ir bet kuris kada nors atskleistas raktas pakeistas.

Raktų saugojimas Mythex

Mythex laiko raktus iš jūsų kodo ir pokalbio dviem būdais:

  • Paslapčių prašymo kortelė. Kai agentui reikia rakto, jis pokalbyje parodo kortelę, kurioje įvedate reikšmę formos laukuose, o ne žinutės lauke, ir ji saugoma kaip projekto paslaptis. Žr. Paslaptys pokalbyje.
  • Projekto nustatymai → Paslaptys arba /secrets pokalbyje, kad patys pridėtumėte ar pakeistumėte raktus. Žr. Aplinkos kintamieji ir paslaptys.

Pakeitę paslaptį paskelbtai programėlei, paskelbkite iš naujo, kad veikianti programėlė ją pasiimtų. Eksportuoti projektai paslapčių neturi, todėl pridėkite juos iš naujo, kur bevykdytumėte kodą. Jei raktas kada nors atsirado pokalbyje, pakeiskite jį teikėjo sistemoje.

Likusiai saugumo peržiūrai prieš paleidimą atlikite saugumo kontrolinį sąrašą DI sukurtoms programėlėms. Jei pridedate DI funkcijų, kaip naudoti LLM API gilesniu lygiu aptaria raktus ir kainas.

Klausimai

Ar saugu dėti API raktą į frontend kodą?

Tik tada, jei teikėjas tą raktą sukūrė kaip viešą, pavyzdžiui, Stripe publishable raktą arba žemėlapių raktą, apribotą jūsų domenui. Bet koks raktas, galintis išleisti pinigus ar skaityti privačius duomenis, turi likti serveryje, nes viskas, kas siunčiama naršyklei, gali būti perskaityta bet kam.

Ką daryti, jei įklijavau API raktą į pokalbį ar viešą repozitoriją?

Pakeiskite jį: teikėjo sistemoje sukurkite naują raktą, atnaujinkite programėlės paslaptis, paskelbkite iš naujo, tada ištrinkite senąjį raktą. Vien žinutės ar commit ištrynimo nepakanka, nes kopijų gali jau būti.

Kur turėtų būti saugomi API raktai?

Jūsų hostingo aplinkos kintamuosiuose ar paslapčių nustatymuose, kuriuos serverio pusės kodas nuskaito vykdymo metu. Jie neturėtų būti įrašyti į šaltinio failus, įkelti į Git ar įtraukti į ekrano nuotraukas.

Kaip sužinoti, ar mano API raktas atviras mano svetainėje?

Atidarykite savo veikiančią svetainę, naršyklės kūrėjo įrankiuose peržiūrėkite puslapio šaltinį ir JavaScript failus ir ieškokite rakto pradžios. Jei jis ten yra, raktas atviras ir turėtų būti perkeltas į serverį bei pakeistas.

Mythex · Pricing · Kurkite bet ką su dirbtiniu intelektu · Svetainių ir programėlių šablonai · Mythex palyginimas · Programėlių kūrimo su dirbtiniu intelektu žodynėlis · Nemokami programėlių kūrimo su dirbtiniu intelektu įrankiai · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)