რა არის გარემოს ცვლადები და საიდუმლოებები? მარტივი სახელმძღვანელო
გარემოს ცვლადი არის სახელდებული პარამეტრი, მაგალითად DATABASE_URL ან STRIPE_SECRET_KEY, რომელიც თქვენს აპლიკაციას გაშვებისას გადაეცემა და არა თავად კოდში ჩაიწერება. საიდუმლოება არის გარემოს ცვლადი, რომლის მნიშვნელობაც კერძო უნდა დარჩეს: API გასაღები, პაროლი ან ხელმოწერის გასაღები. ამ მნიშვნელობების კოდის გარეთ შენახვა ნიშნავს, რომ მათი შეცვლა შეგიძლიათ აპლიკაციის რედაქტირების გარეშე, ტესტირებისთვის და რეალური მომხმარებლებისთვის სხვადასხვა მნიშვნელობა გამოიყენოთ და კოდის გაზიარებისას ან გამოქვეყნებისას ისინი არ გაჟონოს.
რატომ არის მნიშვნელოვანი AI-ით აშენებისას
რამდენიც კი აპლიკაცია სასარგებლო საქმეს სხვა სერვისთან ერთად აკეთებს, მაგალითად იღებს გადახდას, აგზავნის ელფოსტას ან იძახებს AI მოდელს, მას გასაღები სჭირდება. AI აპლიკაციის შემქმნელები ამ გასაღებებს რეგულარულად ითხოვენ, და იმაზე, სად მოხვდება გასაღები, დამოკიდებულია, უსაფრთხოა თუ არა თქვენი აპლიკაცია.
AI-ით აგებულ აპლიკაციებში ორი რამ ხშირად არასწორად მიდის:
- გასაღები ჩატში ან კოდში არის ჩაწერილი. მაშინ ის ჩატის ისტორიაში, პროექტის ფაილებში და ყველა ექსპორტსა თუ რეპოზიტორიში ხვდება. ვინც ამას ნახავს, თქვენს ანგარიშს გამოიყენებს.
- გასაღები ბრაუზერში გამოიყენება. თუ კოდი, რომელიც Stripe-ს ან OpenAI-ს იძახებს, გვერდში მუშაობს, გასაღები ყველა ვიზიტორს მიეწოდება. ადამიანები ამას ამოწმებენ, და ავტომატური სკანერები გამოჟონილ გასაღებებს მუდმივად ეძებენ.
გარემოს ცვლადების გაგება გეხმარებათ ორივე პრობლემის ამოცნობაში და გამოსწორების მოთხოვნაში.
ყოველდღიური ანალოგია: სასტუმროს სეიფი
თქვენი აპლიკაციის კოდი სასტუმროს ოთახს ჰგავს. სტუმრები (და დამლაგებლები, და ყველა, ვისაც საკეტის ბარათი მისცემთ) ამ ოთახში დადიან. პასპორტს მაგიდაზე არ დატოვებთ.
გარემოს ცვლადები ოთახის სეიფია. ოთახმა იცის, რომ სეიფი არსებობს და როგორ გაიხსნას საჭიროებისას, მაგრამ პასპორტი არსად არ დევს. და თუ სხვა ოთახში გადახვალთ, მაგალითად ტესტური გარემოდან რეალურ საიტზე, იმ ოთახის სეიფში სხვა პასპორტს ჩადებთ, ოთახის გადაკეთების გარეშე.
როგორ მუშაობს
თქვენი კოდი სახელს მიმართავს, მნიშვნელობას კი არა. სერვერზე JavaScript-ში ეს ასე გამოიყურება: process.env.STRIPE_SECRET_KEY. აპლიკაციის გაშვებისას პლატფორმა, სადაც ის მუშაობს, ამ სახელისთვის მნიშვნელობას ათავსებს. თუ მნიშვნელობას პლატფორმის პარამეტრებში შეცვლით და აპლიკაციას თავიდან გაუშვებთ ან ხელახლა გამოაქვეყნებთ, ის უკვე ახალ მნიშვნელობას გამოიყენებს, კოდის შეცვლის გარეშე.
მნიშვნელობები იმაზეა დამოკიდებული, სად მუშაობს აპლიკაცია:
| სად მუშაობს | სად ინახება მნიშვნელობები |
|---|---|
| დეველოპერის ლეპტოპზე | ლოკალური ფაილი, ჩვეულებრივ სახელად .env, რომელიც არასდროს უნდა აიტვირთოს git-ში |
| AI შემქმნელის გადახედვაში | პროექტის საიდუმლოებების ან პარამეტრების პანელი |
| ჰოსტინგის პლატფორმაზე | ამ პლატფორმის გარემოს ცვლადების პარამეტრები |
| GitHub Actions-სა ან სხვა ავტომატიზაციაში | სერვისის საკუთარი დაშიფრული საიდუმლოებების საცავი |
საჯარო და საიდუმლო ცვლადები
ყველა გარემოს ცვლადი საიდუმლო არ არის. სასარგებლოა, ორ ჯგუფად დავყოთ:
| ტიპი | მაგალითები | ხედავს თუ არა ბრაუზერი? |
|---|---|---|
| საჯარო კონფიგურაცია | საიტის სახელი, საჯარო ანალიტიკის ID, Stripe-ის publishable გასაღები, ფუნქციის ჩამრთველები | დიახ, ეს ნორმალურია |
| საიდუმლოებები | Stripe-ის secret გასაღები, OpenAI ან Anthropic API გასაღები, მონაცემთა ბაზის კავშირის სტრიქონი, ელფოსტის პროვაიდერის გასაღები, webhook-ის ხელმოწერის გასაღები | არასდროს |
ვებ ფრეიმვორკები ამ გაყოფას აშკარად აკეთებენ. Vite-ში ბრაუზერის კოდში მხოლოდ იმ ცვლადები შედის, რომელთა სახელი VITE_-ით იწყება. Next.js-ში პრეფიქსია NEXT_PUBLIC_. ეს უსაფრთხოების ფუნქციაა: ყველაფერი ამ პრეფიქსებით ყველა ვიზიტორის მიერ ჩამოტვირთულ ფაილებში ხვდება, ამიტომ საიდუმლოს ასეთი პრეფიქსი არასდროს უნდა მიენიჭოს.
სამუშაო მაგალითი: AI-ს შეჯამების ღილაკი
გსურთ ღილაკი «შეაჯამე ეს შენიშვნა», რომელიც AI მოდელს იძახებს.
არასაიმედო ვერსია: ღილაკის კოდი ბრაუზერში მუშაობს და API გასაღებს პირდაპირ AI პროვაიდერს უგზავნის, გასაღები კი კოდში არის ჩაწერილი. გადახედვაში ეს მუშაობს. მაგრამ ნებისმიერს შეუძლია ბრაუზერის დეველოპერულ ხელსაწყოებში გასაღები დააკოპიროს და თქვენს ანგარიშზე ხარჯები გაზარდოს.
უსაფრთხო ვერსია:
- გასაღებს AI პროვაიდერთან ქმნით და პროექტის პარამეტრებში ინახავთ საიდუმლოდ, სახელად
OPENAI_API_KEY(ან მსგავსად). - ბექენდში არის როუტი
POST /api/summarise, რომელიც კითხულობსprocess.env.OPENAI_API_KEY-ს, ამოწმებს, რომ მომხმარებელი სისტემაშია შესული, და პროვაიდერს იძახებს. - ღილაკი იძახებს თქვენს როუტს და არა პროვაიდერს. ბრაუზერი გასაღებს არასდროს ხედავს.
- იგივე საიდუმლოს ამატებთ გამოქვეყნებული აპლიკაციის პარამეტრებში და ხელახლა აქვეყნებთ, რომ საიტზე ისიც არსებობდეს.
ეს ნიმუში, სადაც ბრაუზერი თქვენს სერვერს იძახებს, სერვერი კი გასაღებს ინახავს და სერვისს იძახებს, ეხება გადახდებს, ელფოსტას, რუკებს და ყველა სხვა ფასიან API-ს. LLM API-ების გამოყენების სახელმძღვანელო AI შემთხვევას უფრო დეტალურად განიხილავს.
მთავარი ტერმინები
.envფაილი: ტექსტური ფაილიNAME=valueხაზებით, რომელსაც ლოკალურ განვითარებაში იყენებენ. ჩაწერეთ.gitignore-ში, რომ git-ში არ აიტვირთოს..env.example: ასლი, სადაც სახელებია, მაგრამ რეალური მნიშვნელობები არ წერია. ის git-ში ინახება, რომ სხვებმა იცოდნენ, რომელი ცვლადები უნდა დააყენონ.- Rotate (შეცვლა): საიდუმლოს ახლით შეცვლა და ძველის გაუქმება.
- Scope / უფლებები: ბევრი პროვაიდერი საშუალებას გაძლევთ, გასაღები შექმნათ მხოლოდ გარკვეული მოქმედებებისთვის. გასაღები, რომელსაც მხოლოდ ელფოსტის გაგზავნა შეუძლია, ნაკლებად საშიშია, ვიდრე ის, რომელსაც ყველაფერი შეუძლია.
- სატესტო და რეალური გასაღებები: პროვაიდერები, როგორიცაა Stripe, ტესტირებისთვის და რეალური ფულისთვის ცალკე გასაღებებს გაძლევენ. სანამ აპლიკაციას არ გაუშვებთ, სატესტო გასაღებები გამოიყენეთ.
- ხელმოწერის საიდუმლო: საიდუმლო, რომლითაც მოწმდება, რომ შეტყობინება, მაგალითად webhook, მართლა გამგზავნიდან მოვიდა.
გავრცელებული შეცდომები და მცდარი წარმოდგენები
- «ჩემი რეპოზიტორია კერძოა, ამიტომ მასში გასაღებები კარგია.» კერძო რეპოზიტორიები მაინც ზიარდება, იფორკება, ექსპორტდება და ლეპტოპებზე კლონირდება. გასაღებები იქ არ უნდა იყოს. თუ პროექტს GitHub-ს უკავშირებთ, შეამოწმეთ, რომ
.envფაილი არ შედის. - «წავშალე, ამიტომ აღარ არსებობს.» git ისტორიას ინახავს, ჩატის ჟურნალი კი შეტყობინებებს. თუ გასაღები ოდესმე გაჟონა, შეცვალეთ იგი.
- საიდუმლოსთვის საჯარო პრეფიქსის გამოყენება.
VITE_OPENAI_KEYთქვენს გასაღებს ბრაუზერის ფაილში აგდებს. - ხელახლა გამოქვეყნების დავიწყება. პარამეტრებში ცვლილება ჩვეულებრივ მხოლოდ აპლიკაციის თავიდან გაშვების ან ხელახლა გამოქვეყნების შემდეგ ამოქმედდება.
- ერთი გასაღები ყველაფრისთვის. ცალკე გასაღებები სატესტო და რეალური გარემოსთვის და თითო აპლიკაციისთვის საშუალებას გაძლევთ, ერთი გააუქმოთ სხვების გატეხვის გარეშე.
- ხარჯის ლიმიტის არქონა. ფასიანი API-ებისთვის, გასაღების გაჟონვის შემთხვევაში, პროვაიდერის პანელში ბიუჯეტი ან ლიმიტი დააყენეთ.
რა სთხოვოთ თქვენს AI შემქმნელს
- «წაიკითხე Stripe-ის საიდუმლო გასაღები გარემოს ცვლადიდან სახელად
STRIPE_SECRET_KEY. გამოიყენე მხოლოდ სერვერზე.» - «დარწმუნდი, რომ არცერთი საიდუმლო არ გამოიყენება კლიენტის მხარეს და არ აქვს
VITE_ანNEXT_PUBLIC_პრეფიქსი.» - «შექმენი
.env.example, რომელშიც ჩამოთვლილია აპლიკაციისთვის საჭირო ყველა ცვლადი მნიშვნელობების გარეშე, და დარწმუნდი, რომ.envgit-ის მიერ იგნორირდება.» - «შეამოწმე აგებული frontend ფაილები, რომ მათში API გასაღების მსგავსი სტრიქონი არ იყოს.»
ჩვენი უსაფრთხოების ჩამონათვალი AI-ით აგებული აპლიკაციებისთვის საიდუმლოებებს სხვა შემოწმებებთან ერთად განიხილავს, რომლებიც გაშვებამდე ღირს გასაკეთებლად.
საიდუმლოებები Mythex-ზე
Mythex-ზე საიდუმლოებები პროექტის გარემოს ცვლადებია, რომლებიც როგორც გადახედვის სანდბოქსში, ისე გამოქვეყნებულ აპლიკაციაში შედის. მათ ამატებთ პროექტის პარამეტრები → Secrets მენიუში ან ჩატში /secrets ბრძანებით. როცა აგენტს გასაღები სჭირდება, ის ჩატში საიდუმლოების ბარათს აჩვენებს, ამიტომ მნიშვნელობა ველში შედის და არა შეტყობინებების ისტორიაში. თუ რეალურ აპლიკაციაში საიდუმლოს შეცვლით, ხელახლა გამოაქვეყნეთ, რომ დეპლოიმ იგი აიღოს. პროექტის ექსპორტში საიდუმლოებები არ შედის, ხოლო იმპორტირებული .env ფაილები იშლება, ამიტომ მათ პარამეტრებში ხელახლა დაამატებთ. იხილეთ გარემოს ცვლადები და საიდუმლოებები და საიდუმლოებები ჩატში დოკუმენტაციაში.
კითხვები
რა არის გარემოს ცვლადი?
გარემოს ცვლადი არის სახელდებული პარამეტრი, მაგალითად STRIPE_SECRET_KEY ან DATABASE_URL, რომელიც პროგრამას გაშვებისას გადაეცემა და არა თავად კოდში ჩაიწერება. ერთი და იგივე კოდი შეიძლება სხვადასხვა მნიშვნელობით მუშაობდეს განვითარებისა და წარმოების გარემოში.
რით განსხვავდება გარემოს ცვლადი საიდუმლოებისგან?
საიდუმლოება არის გარემოს ცვლადი, რომლის მნიშვნელობაც კერძო უნდა დარჩეს, მაგალითად API გასაღები, მონაცემთა ბაზის პაროლი ან webhook-ის ხელმოწერის გასაღები. სხვა გარემოს ცვლადები, როგორიცაა საიტის სახელი ან ფუნქციის ჩამრთველი, შეიძლება საჯარო იყოს.
უსაფრთხოა API გასაღებების ჩაწერა frontend-ში?
არა. ყველაფერი, რაც frontend კოდშია, ყველა ვიზიტორის ბრაუზერში ჩამოიტვირთება და შეიძლება წაკითხულ იქნას. საიდუმლო გასაღებები გამოიყენება მხოლოდ სერვერზე, ხოლო ბრაუზერმა უნდა დაუძახოს თქვენს სერვერს, რომელიც შემდეგ უკვე მომწოდებელს დაუძახებს.
რა ვქნა, თუ ჩემი API გასაღები გაჟონა?
დაუყოვნებლივ გააუქმეთ ან შეცვალეთ იგი მომწოდებელთან, შექმენით ახალი, განაახლეთ ის ყველგან, სადაც თქვენი აპლიკაცია საიდუმლოებებს ინახავს, და ხელახლა გამოაქვეყნეთ. გასაღების წაშლა კოდიდან ან ჩატის ისტორიიდან საკმარისი არ არის, რადგან ასლები უკვე შეიძლება არსებობდეს.