Τι είναι οι μεταβλητές περιβάλλοντος και τα μυστικά; Απλός οδηγός
Μια μεταβλητή περιβάλλοντος είναι μια ονομασμένη ρύθμιση — όπως το DATABASE_URL ή το STRIPE_SECRET_KEY — που δίνεται στην εφαρμογή σας όταν εκτελείται, αντί να γράφεται μέσα στον κώδικα. Ένα μυστικό είναι μια μεταβλητή περιβάλλοντος της οποίας η τιμή πρέπει να μένει ιδιωτική: ένα κλειδί API, ένας κωδικός, ένα κλειδί υπογραφής. Όταν κρατάτε αυτές τις τιμές έξω από τον κώδικα, μπορείτε να τις αλλάξετε χωρίς να επεξεργαστείτε την εφαρμογή, να χρησιμοποιείτε διαφορετικές για δοκιμές και για πραγματικούς πελάτες, και να αποφεύγετε τις διαρροές όταν μοιράζεστε ή δημοσιεύετε τον κώδικά σας.
Γιατί έχει σημασία όταν φτιάχνετε με AI
Τη στιγμή που η εφαρμογή σας κάνει κάτι χρήσιμο με μια άλλη υπηρεσία — δέχεται πληρωμή, στέλνει email, καλεί ένα μοντέλο AI — χρειάζεται ένα κλειδί. Τα εργαλεία δημιουργίας εφαρμογών με AI ζητούν συχνά αυτά τα κλειδιά, και το πού καταλήγει το κλειδί καθορίζει αν η εφαρμογή σας είναι ασφαλής.
Στις εφαρμογές που φτιάχνονται με AI συμβαίνουν συνήθως δύο πράγματα που πάνε στραβά:
- Το κλειδί επικολλάται στη συνομιλία ή στον κώδικα. Τότε ζει στο ιστορικό της συνομιλίας, στα αρχεία του project και σε κάθε εξαγωγή ή αποθετήριο. Όποιος το δει μπορεί να χρησιμοποιήσει τον λογαριασμό σας.
- Το κλειδί χρησιμοποιείται στον browser. Αν ο κώδικας που καλεί το Stripe ή το OpenAI τρέχει στη σελίδα, το κλειδί στέλνεται σε κάθε επισκέπτη. Και οι άνθρωποι κοιτάνε· επιπλέον, τα αυτοματοποιημένα εργαλεία σάρωσης ψάχνουν συνεχώς για εκτεθειμένα κλειδιά.
Κατανοώντας τις μεταβλητές περιβάλλοντος, μπορείτε να εντοπίσετε και τα δύο και να ζητήσετε τη διόρθωση.
Μια καθημερινή αναλογία: το χρηματοκιβώτιο του δωματίου
Ο κώδικας της εφαρμογής σας είναι σαν το δωμάτιο ενός ξενοδοχείου. Οι επισκέπτες (και οι καθαρίστριες, και όποιος έχει κάρτα πρόσβασης) το περνούν. Δεν θα αφήνατε το διαβατήριό σας πάνω στο γραφείο.
Οι μεταβλητές περιβάλλοντος είναι το χρηματοκιβώτιο του δωματίου. Το δωμάτιο ξέρει ότι υπάρχει ένα χρηματοκιβώτιο και πώς να το ανοίξει όταν χρειάζεται, αλλά το διαβατήριο δεν είναι εκτεθειμένο. Κι αν μεταφερθείτε σε άλλο δωμάτιο — από τη δοκιμαστική ρύθμιση στο live site σας — βάζετε διαφορετικό διαβατήριο στο χρηματοκιβώτιο εκείνου του δωματίου, χωρίς να ανακαινίσετε τίποτα.
Πώς λειτουργεί
Ο κώδικάς σας αναφέρεται σε ένα όνομα, όχι σε μια τιμή. Σε JavaScript στον server, αυτό μοιάζει με process.env.STRIPE_SECRET_KEY. Όταν ξεκινά η εφαρμογή, η πλατφόρμα όπου τρέχει συμπληρώνει την τιμή για αυτό το όνομα. Αλλάζετε την τιμή στις ρυθμίσεις της πλατφόρμας, κάνετε επανεκκίνηση ή νέο deploy, και η εφαρμογή χρησιμοποιεί τη νέα τιμή — χωρίς αλλαγή στον κώδικα.
Οι τιμές προέρχονται από διαφορετικά σημεία ανάλογα με το πού τρέχει η εφαρμογή:
| Πού τρέχει | Πού φυλάσσονται οι τιμές |
|---|---|
| Στον υπολογιστή του developer | Ένα τοπικό αρχείο, συνήθως με όνομα .env, που δεν πρέπει ποτέ να μπαίνει στο git |
| Στην προεπισκόπηση ενός builder με AI | Το πάνελ μυστικών ή ρυθμίσεων του project |
| Σε πλατφόρμα φιλοξενίας | Οι ρυθμίσεις μεταβλητών περιβάλλοντος της πλατφόρμας |
| Στο GitHub Actions ή σε άλλη αυτοματοποίηση | Το κρυπτογραφημένο χώρο μυστικών της υπηρεσίας |
Δημόσιες και μυστικές μεταβλητές
Δεν είναι όλες οι μεταβλητές περιβάλλοντος μυστικές. Βοηθά να τις χωρίσετε σε δύο ομάδες:
| Είδος | Παραδείγματα | Μπορεί να τη δει ο browser; |
|---|---|---|
| Δημόσιες ρυθμίσεις | Όνομα site, δημόσιο αναγνωριστικό analytics, δημοσιεύσιμο κλειδί Stripe, διακόπτες λειτουργιών | Ναι, και αυτό είναι εντάξει |
| Μυστικά | Μυστικό κλειδί Stripe, κλειδί API του OpenAI ή του Anthropic, σειρά σύνδεσης βάσης δεδομένων, κλειδί υπηρεσίας email, μυστικό υπογραφής webhook | Ποτέ |
Τα frameworks για web κάνουν ρητό αυτόν τον διαχωρισμό. Στο Vite, μόνο οι μεταβλητές των οποίων τα ονόματα ξεκινούν με VITE_ περιλαμβάνονται στον κώδικα του browser· στο Next.js, το πρόθεμα είναι NEXT_PUBLIC_. Πρόκειται για μηχανισμό ασφαλείας: ό,τι έχει αυτά τα προθέματα καταλήγει στα αρχεία που κατεβάζει κάθε επισκέπτης, οπότε ένα μυστικό δεν πρέπει ποτέ να τα έχει.
Ένα παράδειγμα βήμα προς βήμα: ένα κουμπί περίληψης με AI
Θέλετε ένα κουμπί «Σύνοψη αυτής της σημείωσης» που καλεί ένα μοντέλο AI.
Η μη ασφαλής εκδοχή: ο κώδικας του κουμπιού, που τρέχει στον browser, καλεί απευθείας τον πάροχο AI με το κλειδί API γραμμένο μέσα του. Λειτουργεί στην προεπισκόπηση. Σημαίνει όμως ότι οποιοσδήποτε μπορεί να ανοίξει τα εργαλεία προγραμματιστή του browser, να αντιγράψει το κλειδί και να χρεώσει τον λογαριασμό σας.
Η ασφαλής εκδοχή:
- Δημιουργείτε το κλειδί στον πάροχο AI και το αποθηκεύετε ως μυστικό με όνομα
OPENAI_API_KEY(ή παρόμοιο) στις ρυθμίσεις του project. - Το backend αποκτά μια διαδρομή,
POST /api/summarise, που διαβάζει τοprocess.env.OPENAI_API_KEY, ελέγχει ότι ο χρήστης είναι συνδεδεμένος και καλεί τον πάροχο. - Το κουμπί καλεί τη δική σας διαδρομή, όχι τον πάροχο. Ο browser δεν βλέπει ποτέ το κλειδί.
- Προσθέτετε το ίδιο μυστικό στις ρυθμίσεις της δημοσιευμένης εφαρμογής και κάνετε νέο deploy, ώστε και το live site να το έχει.
Αυτό το μοτίβο — ο browser καλεί τον δικό σας server, ο server κρατά το κλειδί και καλεί την υπηρεσία — ισχύει για πληρωμές, email, χάρτες και κάθε άλλο πληρωμένο API. Ο οδηγός για τη χρήση LLM API καλύπτει την περίπτωση της AI σε μεγαλύτερο βάθος.
Βασικοί όροι
- Αρχείο
.env: ένα κείμενο με γραμμέςΟΝΟΜΑ=τιμή, που χρησιμοποιείται στην τοπική ανάπτυξη. Προσθέστε το στο.gitignoreώστε να μη γίνεται commit. .env.example: αντίγραφο με τα ονόματα αλλά χωρίς πραγματικές τιμές, που γίνεται commit ώστε οι άλλοι να ξέρουν ποιες μεταβλητές να ορίσουν.- Rotate (αντικατάσταση): αντικαθιστάτε ένα μυστικό με νέο και ανακαλείτε το παλιό.
- Scope / δικαιώματα: πολλοί πάροχοι σας αφήνουν να δημιουργήσετε κλειδιά που μπορούν να κάνουν μόνο ορισμένα πράγματα. Ένα κλειδί που μπορεί μόνο να στέλνει email είναι λιγότερο επικίνδυνο από ένα που μπορεί τα πάντα.
- Κλειδιά δοκιμής vs πραγματικά: πάροχοι όπως το Stripe δίνουν ξεχωριστά κλειδιά για δοκιμές και για πραγματικά χρήματα. Χρησιμοποιήστε τα κλειδιά δοκιμής μέχρι να κυκλοφορήσετε.
- Μυστικό υπογραφής: μυστικό που χρησιμοποιείται για να ελέγξει ότι ένα μήνυμα, όπως ένα webhook, προήλθε πραγματικά από τον αποστολέα.
Συνηθισμένα λάθη και παρανοήσεις
- «Το αποθετήριό μου είναι ιδιωτικό, άρα τα κλειδιά μέσα του είναι εντάξει». Τα ιδιωτικά αποθετήρια μοιράζονται, γίνονται fork, εξάγονται και κλωνοποιούνται σε laptop. Τα κλειδιά δεν ανήκουν εκεί. Αν συνδέετε ένα project με το GitHub, ελέγξτε ότι δεν περιλαμβάνεται αρχείο
.env. - «Το διέγραψα, άρα έχει χαθεί». Το git κρατά ιστορικό και το ιστορικό συνομιλιών κρατά τα μηνύματα. Αν ένα κλειδί έχει εκτεθεί ποτέ, αντικαταστήστε το.
- Χρήση δημόσιου προθέματος σε μυστικό. Το
VITE_OPENAI_KEYβάζει το κλειδί σας στο bundle του browser. - Ξεχνάτε να κάνετε νέο deploy. Η αλλαγή μιας μεταβλητής στις ρυθμίσεις συνήθως ισχύει μόνο αφού επανεκκινηθεί ή δημοσιευτεί ξανά η εφαρμογή.
- Ένα κλειδί για όλα. Ξεχωριστά κλειδιά για δοκιμή και για παραγωγή, και για κάθε εφαρμογή, σας επιτρέπουν να ανακαλέσετε ένα χωρίς να χαλάσετε τα υπόλοιπα.
- Χωρίς όριο δαπάνης. Για πληρωμένα API, ορίστε προϋπολογισμό ή όριο στον πίνακα του παρόχου, για την περίπτωση που διαρρεύσει ένα κλειδί.
Τι να ζητήσετε από τον builder σας με AI
- «Διάβασε το μυστικό κλειδί Stripe από μια μεταβλητή περιβάλλοντος με όνομα
STRIPE_SECRET_KEY. Χρησιμοποίησέ το μόνο στον server.» - «Βεβαιώσου ότι κανένα μυστικό δεν χρησιμοποιείται σε κώδικα πελάτη και ότι δεν έχει πρόθεμα
VITE_/NEXT_PUBLIC_.» - «Δημιούργησε ένα
.env.exampleπου θα απαριθμεί κάθε μεταβλητή που χρειάζεται η εφαρμογή, χωρίς τιμές, και βεβαιώσου ότι το.envαγνοείται από το git.» - «Έλεγξε τα αρχεία του frontend που παράχθηκαν για κάθε συμβολοσειρά που μοιάζει με κλειδί API.»
Ο οδηγός ασφαλείας μας για εφαρμογές φτιαγμένες με AI καλύπτει τα μυστικά μαζί με τους άλλους ελέγχους που αξίζει να κάνετε πριν την κυκλοφορία.
Μυστικά στο Mythex
Στο Mythex, τα μυστικά είναι μεταβλητές περιβάλλοντος του project που εισάγονται τόσο στην προεπισκόπηση όσο και στη δημοσιευμένη εφαρμογή σας. Τα προσθέτετε στις ρυθμίσεις project → Secrets ή με την εντολή /secrets στη συνομιλία, και όταν ο agent χρειάζεται ένα κλειδί εμφανίζει μια κάρτα μυστικών στη συνομιλία, ώστε η τιμή να μπαίνει σε πεδίο φόρμας και όχι στο κείμενο της συνομιλίας. Αν αλλάξετε ένα μυστικό για μια live εφαρμογή, δημοσιεύστε ξανά ώστε το deploy να το πάρει. Οι εξαγωγές του project δεν περιλαμβάνουν μυστικά, και τα εισαγόμενα αρχεία .env καθαρίζονται, ώστε να τα ξαναβάλετε στις ρυθμίσεις. Δείτε τις μεταβλητές περιβάλλοντος και τα μυστικά και τα μυστικά στη συνομιλία στα docs.
Ερωτήσεις
Τι είναι μια μεταβλητή περιβάλλοντος;
Μια μεταβλητή περιβάλλοντος είναι μια ονομασμένη ρύθμιση, όπως το STRIPE_SECRET_KEY ή το DATABASE_URL, που δίνεται σε ένα πρόγραμμα όταν εκτελείται, αντί να γράφεται μέσα στον κώδικά του. Έτσι, ο ίδιος κώδικας μπορεί να χρησιμοποιεί διαφορετικές τιμές σε ανάπτυξη και παραγωγή.
Ποια είναι η διαφορά μεταξύ μεταβλητής περιβάλλοντος και μυστικού;
Ένα μυστικό είναι μια μεταβλητή περιβάλλοντος της οποίας η τιμή πρέπει να μένει ιδιωτική, όπως ένα κλειδί API, ένας κωδικός βάσης δεδομένων ή ένα μυστικό υπογραφής webhook. Οι υπόλοιπες μεταβλητές, όπως το όνομα ενός site ή ένας διακόπτης λειτουργιών, μπορούν να είναι δημόσιες.
Είναι ασφαλές να βάλω κλειδιά API στο frontend μου;
Όχι. Ό,τι υπάρχει στον κώδικα του frontend κατεβαίνει στον browser κάθε επισκέπτη και μπορεί να διαβαστεί. Τα μυστικά κλειδιά πρέπει να χρησιμοποιούνται μόνο στον server, και ο browser πρέπει να καλεί τον δικό σας server, ο οποίος στη συνέχεια καλεί τον πάροχο.
Τι πρέπει να κάνω αν διαρρεύσει το κλειδί API μου;
Ανακαλέστε ή αντικαταστήστε το κλειδί στον πάροχο αμέσως, δημιουργήστε ένα νέο, ενημερώστε το σε όποιο σημείο η εφαρμογή σας αποθηκεύει μυστικά και κάντε νέο deploy. Η διαγραφή του κλειδιού από τον κώδικα ή από το ιστορικό της συνομιλίας δεν αρκεί, γιατί μπορεί ήδη να υπάρχουν αντίγραφα.