Gestione dei segreti e variabili d’ambiente
Distingua tra variabili d’ambiente lato server e lato client, prevenga la diffusione dei segreti nei bundle e usi l’iniezione a runtime.
Gestione dei segreti e variabili d’ambiente è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.
Due categorie di variabili d'ambiente
In un'applicazione React, le variabili d'ambiente rientrano in due categorie: lato server (non vengono mai inviate al browser) e lato client (incorporate nel bundle JavaScript). Capire a quale categoria appartengono le variabili è il primo passo nella gestione dei segreti, perché le variabili lato client sono di fatto pubbliche una volta distribuito il bundle.
Convenzione del prefisso Vite
Nei progetti Vite, solo le variabili con prefisso VITE_ vengono incluse nel bundle client. VITE_PUBLIC_API_URL=https://api.example.com è accessibile nel codice del browser tramite import.meta.env.VITE_PUBLIC_API_URL. Tutte le altre variabili vengono rimosse dal bundle in fase di build e restano disponibili solo lato server.
Convenzione del prefisso Next.js
In Next.js, il prefisso NEXT_PUBLIC_ espone una variabile al codice JavaScript del browser. NEXT_PUBLIC_ANALYTICS_ID=UA-123 viene incorporato nel bundle client. Le variabili prive del prefisso, come DATABASE_URL, sono accessibili solo nel codice lato server (Server Components, API routes, Server Actions) e non vengono mai inviate al browser.
Il rischio di esposizione accidentale
Una variabile priva di prefisso può comunque diventare accessibile se viene serializzata accidentalmente. Ad esempio, se un Server Component passa il proprio oggetto di configurazione completo come prop a un Client Component e tale configurazione include DATABASE_URL, quel segreto compare nell'HTML inviato al browser. Un'attenta gestione dei prop e una verifica della serializzazione impediscono questo problema.
Cosa non va mai inserito nel codice client
I seguenti elementi non devono mai comparire nel bundle client: stringhe di connessione e password dei database, chiavi segrete per le API di terze parti (chiave segreta di Stripe, chiave API di OpenAI), chiavi private RSA/EC, segreti per la firma dei JWT e token interni di autenticazione dei servizi. Se uno di questi elementi è necessario per una chiamata API, faccia passare la chiamata tramite un endpoint server.
Il pattern Backend for Frontend
Il pattern Backend for Frontend (BFF) inserisce un sottile livello server tra l'app React e i servizi esterni sensibili. Il client chiama /api/stripe/charge, il server BFF aggiunge la chiave segreta di Stripe e chiama l'API di Stripe, quindi il BFF restituisce solo i dati di risposta necessari. I segreti restano permanentemente sul server.
dotenv-vault e archiviazione gestita dei segreti
dotenv-vault crittografa il file .env e consente di condividerlo e distribuirlo in modo sicuro tra gli ambienti senza inserire segreti in chiaro nel controllo versione. Le alternative per la produzione includono HashiCorp Vault (aziendale), AWS Parameter Store (SSM) e GCP Secret Manager: tutti offrono il recupero dei segreti tramite API a runtime anziché in fase di build.
Segreti nelle pipeline CI/CD
Le piattaforme CI/CD (GitHub Actions, GitLab CI) offrono un archivio cifrato per i segreti, accessibile come variabili d'ambiente durante le build. Conservi i segreti in GitHub Secrets e li richiami nei workflow come ${{ secrets.STRIPE_SECRET_KEY }}. I segreti vengono mascherati nei log e non vengono mai inclusi nell'artefatto generato.
File di configurazione specifici per ambiente
Next.js e Vite supportano diversi file .env: .env (tutti gli ambienti), .env.local (override locali, esclusi da Git), .env.development e .env.production. Il file locale sostituisce i valori del file condiviso, consentendo una configurazione specifica per ogni sviluppatore senza influire sugli altri ambienti.
Verificare i bundle alla ricerca di segreti
Dopo la build, verifichi il bundle JavaScript per individuare eventuali segreti esposti accidentalmente. Esegua grep -r "password|secret|api_key" dist/ oppure utilizzi uno strumento dedicato, come l'analisi con strings, sui file generati. Alcuni segreti inclusi accidentalmente sono facilmente identificabili dal loro formato (UUID, stringhe base64 o prefissi di chiavi come sk_live_).
Principio della minima esposizione
Ogni ambiente e ogni servizio devono poter accedere solo ai segreti di cui hanno bisogno. Il client React non ha bisogno di alcun segreto: dovrebbe ricevere solo identificatori pubblici. Il server BFF ha bisogno esclusivamente dei segreti necessari per le API che chiama. Gli ambienti di sviluppo dovrebbero utilizzare chiavi API non di produzione, con autorizzazioni limitate e limiti di spesa.
Prefisso NEXT_PUBLIC_
Che cosa accade a una variabile d'ambiente di Next.js con il prefisso NEXT_PUBLIC_?
Riepilogo della lezione
Vite utilizza VITE_ e Next.js utilizza NEXT_PUBLIC_ per esporre le variabili al bundle del browser. Tutte le altre variabili sono disponibili solo lato server. Non includa mai password di database, chiavi API segrete o segreti per la firma dei JWT nel codice client. Utilizzi il pattern BFF per inoltrare le chiamate API sensibili. Utilizzi dotenv-vault, AWS Parameter Store o GitHub Secrets per la gestione dei segreti in produzione. Verifichi i bundle generati per individuare eventuali segreti esposti accidentalmente.
Domande Frequenti
La lezione «Gestione dei segreti e variabili d’ambiente» è gratuita?
Sì — il testo completo di «Gestione dei segreti e variabili d’ambiente» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.
Cosa imparerò in «Gestione dei segreti e variabili d’ambiente»?
Distingua tra variabili d’ambiente lato server e lato client, prevenga la diffusione dei segreti nei bundle e usi l’iniezione a runtime. Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare React Academy?
Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Gestione dei segreti e variabili d’ambiente»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione React Academy?
Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- XSS in React: dangerouslySetInnerHTML e script di terze parti
- Protezione CSRF in React e nelle configurazioni API
- Content Security Policy per le app React
- Gestione dei segreti e variabili d’ambiente