როგორ შევინახოთ API გასაღებები უსაფრთხოდ თქვენს აპში
API გასაღებების უსაფრთხოდ შესანახად შეინახეთ ისინი საიდუმლოებად ან გარემოს ცვლადებად თქვენს ჰოსტზე, გამოიყენეთ მხოლოდ სერვერულ კოდში და არასდროს ჩასვათ ჩატში, კოდის ფაილებში, ეკრანის სურათებზე ან Git რეპოზიტორიაში. თითოეულ გასაღებს მიანიჭეთ მხოლოდ საჭირო უფლებები, დააყენეთ ხარჯების ლიმიტები პროვაიდერთან და თუ გასაღები ოდესმე გაჟონა, შეცვალეთ იგი — შექმენით ახალი და წაშალეთ ძველი — და არა უბრალოდ დამალეთ, სად გამოჩნდა.
API გასაღები არის სერვისის პაროლი. თქვენი OpenAI გასაღები საშუალებას აძლევს ვინმეს თქვენი ფულით AI გამოიყენოს; თქვენი Stripe საიდუმლო გასაღები — დაბრუნებების გაკეთებას; თქვენი ელფოსტის პროვაიდერის გასაღები — თქვენი სახელით ელფოსტის გაგზავნას. AI აპ-ბილდერები კარგად აერთებენ ამ გასაღებებს, მაგრამ ყოველთვის არ ზრუნავენ იმაზე, სად ხვდება ისინი. ეს გიდი გიჩვენებთ, როგორ შეინახოთ ისინი უსაფრთხოდ და როგორ შეამოწმოთ.
საჯარო და საიდუმლო გასაღებები
ყოველი გასაღები საიდუმლო არ არის. ამ განსხვავების ცოდნა გაგიცლით ზედმეტ შიშს არასწორ გასაღებზე და გაგიჩენთ ყურადღებას სწორზე.
| ტიპი | მაგალითები | შეიძლება თუ არა ბრაუზერში? |
|---|---|---|
| Publishable / საჯარო გასაღებები | Stripe-ის pk_… გასაღები, რუკის გასაღები თქვენს დომენზე შეზღუდული, ზოგი ანალიტიკის ID | დიახ — ამისთვის არის განკუთვნილი |
| საიდუმლო გასაღებები | Stripe-ის sk_…, OpenAI და Anthropic გასაღებები, ელფოსტის პროვაიდერის გასაღებები, მონაცემთა ბაზის პაროლები | არასდროს |
| სერვისის/ადმინისტრატორის გასაღებები | გასაღებები, რომლებიც ჰოსტირებული მონაცემთა ბაზის წვდომის წესებს გვერდს უვლის | არასდროს — მიიჩნიეთ ყველაზე მგრძნობიარედ |
თუ არ ხართ დარწმუნებული, რა ტიპისაა გასაღები, შეამოწმეთ პროვაიდერის დოკუმენტაცია. ეჭვის შემთხვევაში მიიჩნიეთ საიდუმლოდ.
ნაბიჯი 1: შეინახეთ გასაღებები საიდუმლოებად, არა კოდში
გასაღებები უნდა იყოს თქვენი ჰოსტის გარემოს ცვლადებში ან საიდუმლოების პარამეტრებში. თქვენი კოდი მათ სახელით კითხულობს გაშვებისას (მაგალითად process.env.OPENAI_API_KEY), ამიტომ მნიშვნელობა არასდროს ჩანს თქვენს ფაილებში. ფონისთვის იხილეთ რა არის გარემოს ცვლადები და საიდუმლოები.
გადაიტანე ყველა API გასაღები კოდიდან გარემოს ცვლადებში. ჩამოთვალე თითოეული გასაღები, რომელ ფაილში იყო და რა ცვლადის სახელი გამოიყენე. მნიშვნელობები არ მაჩვენო.
შემდეგ შეამოწმეთ, რომ აღარაფერი დარჩა:
მოძებნე მთელ პროექტში, კონფიგურაციის ფაილებისა და .env ფაილების ჩათვლით, ყველაფერი, რაც API გასაღებს ან პაროლს ჰგავს. მიმითითე ფაილი და სტრიქონი, მნიშვნელობა არა.
ნაბიჯი 2: გამოიყენეთ საიდუმლო გასაღებები მხოლოდ სერვერზე
ეს არის ყველაზე მნიშვნელოვანი წესი. ყველაფერი, რასაც ბრაუზერი იღებს, ვიზიტორს შეუძლია წაიკითხოს — გვერდის წყარო და JavaScript ფაილები დეველოპერულ ინსტრუმენტებში ყველასთვის ხილულია.
ამიტომ, თუ აპს OpenAI-თან უნდა ურთიერთობა, ბრაუზერმა უნდა გამოიძახოს თქვენი სერვერი, ხოლო სერვერი OpenAI-ს იძახებს გასაღებით. გასაღები სერვერს არასდროს ტოვებს.
ჩატის ფუნქცია OpenAI-ს პირდაპირ ბრაუზერიდან იძახებს. გადაიტანე ეს გამოძახება სერვერულ API მარშრუტში, რომელიც OPENAI_API_KEY-ს გარემოდან კითხულობს. ბრაუზერმა მხოლოდ ჩვენი მარშრუტი უნდა გამოიძახოს. მარშრუტისთვის მოითხოვე შესვლა.
ფრონტენდ ფრეიმვორკებში ერთ გავრცელებულ ხაფანგს უნდა ეცნოთ: საჯარო პრეფიქსის მქონე ცვლადები — Vite-ში VITE_, Next.js-ში NEXT_PUBLIC_ — განზრახ ჩაიწერება ბრაუზერის კოდში. საიდუმლო გასაღები ერთ-ერთი ასეთი პრეფიქსით გაჟონილია, მიუხედავად იმისა, რომ „გარემოს ცვლადშია“.
ნაბიჯი 3: შეამოწმეთ, რომ არაფერი ჟონავს
არ დაეყრდნოთ იმას, რომ ყველაფერი კარგად იმუშავა — შეამოწმეთ ცოცხალი საიტი:
- გახსენით გამოქვეყნებული აპი ბრაუზერში.
- გახსენით დეველოპერული ინსტრუმენტები, შემდეგ Sources ან Network ჩანართი.
- მოძებნეთ ფაილებში თითოეული საიდუმლო გასაღების პირველი სიმბოლოები (მაგალითად
sk_ანsk-). - გადახედეთ ქსელურ მოთხოვნებს, რომლებსაც აპი აკეთებს. ბრაუზერიდან პირდაპირ ფასიან AI პროვაიდერთან მოთხოვნა წითელი დროშაა.
თუ საიდუმლო გასაღები იპოვეთ, გადაიტანეთ სერვერზე (ნაბიჯი 2) და შეცვალეთ (ნაბიჯი 6), რადგან ის უკვე საჯარო იყო.
ნაბიჯი 4: შეზღუდეთ, რა შეუძლია თითოეულ გასაღებს
ბევრი პროვაიდერი გასაღების შეზღუდვის საშუალებას იძლევა:
- შეზღუდული გასაღებები, რომლებსაც მხოლოდ იმის გაკეთება შეუძლიათ, რაც აპს სჭირდება. მაგალითად, Stripe მხარს უჭერს შეზღუდულ გასაღებებს კონკრეტული უფლებებით.
- დომენის ან IP შეზღუდვები იმ გასაღებებისთვის, რომლებიც საჯარო უნდა იყოს, მაგალითად რუკის გასაღებები.
- ცალკე გასაღებები თითო აპზე და თითო გარემოზე, რომ ერთმა გაჟონვამ ყველაფერი არ გახსნას და ერთის გაუქმებამ სხვები არ დააზიანოს.
- სატესტო გასაღებები აშენების დროს, ხოლო ცოცხალი გასაღებები მხოლოდ გამოქვეყნებულ აპში.
ნაბიჯი 5: დაადეთ ზღვარი ზიანს
თუნდაც კარგად დაცული გასაღები შეიძლება ბოროტად გამოიყენონ თქვენი აპის მეშვეობით — მაგალითად, ვინმე თქვენს AI ფუნქციას ათასჯერ სკრიპტით გამოიძახებს.
- დააყენეთ ხარჯების ლიმიტები ან შეტყობინებები ყველა ფასიან პროვაიდერთან.
- მოითხოვეთ შესვლა ყოველ ფუნქციაზე, რომელიც გამოძახებაზე ფულს ჯდება.
- დაამატეთ თითო მომხმარებელზე ლიმიტი. იხილეთ რა არის მოთხოვნების შეზღუდვა.
დაამატე ლიმიტი: 30 AI მოთხოვნა თითო მომხმარებელზე საათში /api/chat-ისთვის. როცა ლიმიტს მიაღწევენ, აჩვენე ნათელი შეტყობინება. უარყავი მოთხოვნები მომხმარებლებისგან, რომლებიც შესულები არ არიან.
ნაბიჯი 6: შეცვალეთ გაჟონილი გასაღებები
თუ საიდუმლო გასაღები იქ გამოჩნდა, სადაც არ უნდა ყოფილიყო — ჩატის შეტყობინებაში, commit-ში, ეკრანის სურათზე, მხარდაჭერის ბილეთში, ბრაუზერის კოდში — ივარაუდეთ, რომ იგი კომპრომეტირებულია.
- შექმენით ახალი გასაღები პროვაიდერთან.
- განაახლეთ საიდუმლო აპის პარამეტრებში.
- ხელახლა გაუშვით ან ხელახლა გამოაქვეყნეთ, რომ ცოცხალი აპი ახალ გასაღებს იყენებდეს.
- წაშალეთ ძველი გასაღები პროვაიდერთან.
- შეამოწმეთ პროვაიდერის გამოყენების ჟურნალები უცნობი აქტივობისთვის.
ჩატის შეტყობინების ან Git commit-ის წაშლა არ კმარა. Git ისტორია ძველ ვერსიებს ინახავს, ხოლო ყველაფერი, რაც საჯარო იყო, შეიძლება უკვე კოპირებული იყოს.
გავრცელებული შეცდომები
- გასაღების ჩასმა მოთხოვნაში. ახლა ის ჩატის ისტორიაშია. გამოიყენეთ საიდუმლოების ფორმა.
- საჯარო პრეფიქსი საიდუმლო ცვლადზე.
VITE_OPENAI_API_KEYგასაღებს ყველა ვიზიტორს აწვდის. - .env ფაილის commit-ი. დარწმუნდით, რომ ის
.gitignore-შია პირველ push-მდე. - ერთი გასაღები ყველგან. გამოიყენეთ ცალკე გასაღებები ტესტისთვის, ცოცხალისთვის და თითო აპისთვის.
- ხარჯების ლიმიტის არქონა. გაჟონილმა ან ბოროტად გამოყენებულმა გასაღებმა ლიმიტის გარეშე შეიძლება დიდი ანგარიში გამოიწვიოს, სანამ შეამჩნევთ.
- დამალვა ნაცვლად შეცვლისა. გასაღების გაჟონვის შემდეგ მხოლოდ ახალი გასაღები ასწორებს პრობლემას.
- გასაღებები ეკრანის სურათებზე. დაჭერამდე მოაჭერით ან დაბურეთ პარამეტრების გვერდები, როცა დახმარებას ითხოვთ.
ჩამონათვალი
- ყოველი გასაღები შენახულია საიდუმლოდ ან გარემოს ცვლადად, არა კოდში.
- .env ფაილი ან გასაღები არ არის Git-ში commit-ებული.
- საიდუმლო გასაღებები გამოიყენება მხოლოდ სერვერულ კოდში.
- არცერთი საიდუმლო ცვლადი არ იყენებს საჯარო პრეფიქსს, როგორიცაა
VITE_ანNEXT_PUBLIC_. - ცოცხალი საიტის JavaScript-ში თითოეული გასაღების პრეფიქსი მოვძებნე და ვერაფერი ვიპოვე.
- გასაღებები შეზღუდულია იქ, სადაც პროვაიდერი ამის საშუალებას იძლევა.
- ტესტისა და ცოცხალი გასაღებები ცალკეა.
- ფასიანი ფუნქციები მოითხოვს შესვლას და აქვს თითო მომხმარებლის ლიმიტები.
- ყოველ ფასიან პროვაიდერს აქვს ხარჯების ზღვარი ან შეტყობინება.
- ვიცი, როგორ შევცვალო თითოეული გასაღები, და ყველა გასაღები, რომელიც ოდესმე გაჟონილა, შეცვლილია.
გასაღებების უსაფრთხოდ შენახვა Mythex-ზე
Mythex გასაღებებს კოდიდან და ჩატიდან ორი გზით აშორებს:
- საიდუმლოების მოთხოვნის ბარათი. როცა აგენტს გასაღები სჭირდება, ის ჩატში აჩვენებს ბარათს, სადაც მნიშვნელობას ველებში შეიყვანთ და არა შეტყობინების ველში, და ის შეინახება როგორც პროექტის საიდუმლო. იხილეთ საიდუმლოები ჩატში.
- პროექტის პარამეტრები → Secrets, ან ჩატში
/secrets, რომ თავად დაამატოთ ან შეცვალოთ გასაღებები. იხილეთ გარემოს ცვლადები და საიდუმლოები.
გამოქვეყნებული აპისთვის საიდუმლოს შეცვლის შემდეგ ხელახლა გამოაქვეყნეთ, რომ ცოცხალმა აპმა ის აიღოს. ექსპორტირებულ პროექტებში საიდუმლოები არ შედის, ამიტომ იქ, სადაც კოდს შემდეგ გაუშვებთ, ხელახლა დაამატეთ. თუ გასაღები ოდესმე ჩატში გამოჩნდა, შეცვალეთ იგი პროვაიდერთან.
გაშვებამდე უსაფრთხოების დანარჩენი შემოწმებისთვის გაიარეთ უსაფრთხოების ჩამონათვალი AI-ით აშენებული აპებისთვის. თუ AI ფუნქციებს ამატებთ, როგორ გამოვიყენოთ LLM API-ები გასაღებებსა და ხარჯებს უფრო ღრმად განიხილავს.
კითხვები
უსაფრთხოა API გასაღების ჩადება frontend კოდში?
მხოლოდ მაშინ, თუ პროვაიდერმა ეს გასაღები საჯაროდ განკუთვნა, მაგალითად Stripe-ის publishable გასაღები ან რუკის გასაღები, რომელიც თქვენს დომენზეა შეზღუდული. ყოველი გასაღები, რომელსაც შეუძლია ფულის დახარჯვა ან პირადი მონაცემების წაკითხვა, სერვერზე უნდა დარჩეს, რადგან ბრაუზერში გაგზავნილს ყველა შეძლებს წაკითხვას.
რა ვქნა, თუ API გასაღები ჩატში ან საჯარო რეპოზიტორიაში ჩავსვი?
შეცვალეთ იგი: შექმენით ახალი გასაღები პროვაიდერთან, განაახლეთ აპის საიდუმლოები, ხელახლა გამოაქვეყნეთ და შემდეგ წაშალეთ ძველი გასაღები. შეტყობინების ან commit-ის წაშლა არ კმარა, რადგან ასლები შეიძლება უკვე არსებობდეს.
სად უნდა ინახებოდეს API გასაღებები?
თქვენი ჰოსტინგის გარემოს ცვლადებში ან საიდუმლოების პარამეტრებში, რომელსაც სერვერული კოდი გაშვებისას კითხულობს. ისინი არ უნდა ჩაიწეროს წყაროს ფაილებში, არ უნდა გაკეთდეს commit Git-ში და არ უნდა ჩანდეს ეკრანის სურათებზე.
როგორ შევამოწმო, გამოჩნდა თუ არა ჩემი API გასაღები ვებსაიტზე?
გახსენით თქვენი ცოცხალი საიტი, ნახეთ გვერდის წყარო და JavaScript ფაილები ბრაუზერის დეველოპერულ ინსტრუმენტებში და მოძებნეთ გასაღების დასაწყისი. თუ ის ჩანს, გასაღები გაჟონილია და უნდა გადავიდეს სერვერზე და შეიცვალოს.