Node.js: Gestire i segreti
Come gestire i segreti con Node.js
👋 Benvenuti nella documentazione di Stackhero!
Stackhero offre una soluzione Node.js cloud pronta all'uso che fornisce numerosi vantaggi, tra cui:
- Distribuisci la tua applicazione in pochi secondi con un semplice
git push.- Usa il tuo nome di dominio e beneficia della configurazione automatica dei certificati HTTPS per una sicurezza potenziata.
- Goditi la tranquillità con backup automatici, aggiornamenti con un clic, e una tariffazione semplice, trasparente e prevedibile.
- Ottieni prestazioni ottimali e una sicurezza robusta grazie a una VM privata e dedicata.
Risparmia tempo e semplificati la vita: bastano solo 5 minuti per provare la soluzione di hosting cloud Node.js di Stackhero!
Quando il vostro progetto Node.js interagisce con un database, un object storage o un'API esterna, è fondamentale conservare in modo sicuro le credenziali, come nomi utente, password o token. Queste credenziali sono spesso chiamate "segreti". Mantenere la riservatezza dei vostri segreti è essenziale per garantire la sicurezza della vostra applicazione.
Cosa potreste essere tentati di fare
All'inizio, potreste pensare di scrivere le vostre credenziali direttamente nel codice, in questo modo:
// Connessione a un database PostgreSQL
const pg = new Client({
host: '<XXXXXX>.stackhero-network.com',
user: 'admin',
password: 'myPassword',
database: 'admin'
});
Tuttavia, questo approccio non è sicuro. I vostri segreti potrebbero facilmente finire nel vostro repository Git, diventando visibili a chiunque abbia accesso al codice. Anche se pensate di essere gli unici ad avere accesso, è un po' come lasciare un Post-it con le vostre password sul monitor sperando che nessuno lo noti. Questo può portare a gravi problemi di sicurezza.
Inoltre, inserire i segreti direttamente nel codice rende difficile gestire in modo fluido ambienti diversi, come sviluppo e produzione.
Le variabili d'ambiente
Una best practice ampiamente adottata nel settore è quella di conservare i segreti nelle variabili d'ambiente.
Le variabili d'ambiente sono definite al di fuori del codice e vengono impostate prima dell'avvio di Node.js. L'idea è di definire tutti i vostri segreti tramite variabili d'ambiente, in modo che non siano mai scritti direttamente nell'applicazione.
Definire le prime variabili d'ambiente
Potete definire una variabile d'ambiente impostandola all'inizio del comando Node.js, ad esempio:
MY_PASSWORD=myDevelopmentPassword node app.js
Questo comando crea una variabile chiamata MY_PASSWORD con valore myDevelopmentPassword. Il formato è semplice: <KEY>=<valore>.
Per convenzione, le variabili d'ambiente sono scritte in lettere maiuscole. È importante notare che le variabili d'ambiente possono contenere solo stringhe, non array o oggetti.
Leggere le variabili d'ambiente
All'interno del file app.js, potete accedere alla variabile d'ambiente tramite process.env, in questo modo:
console.log(process.env.MY_PASSWORD);
Questo visualizzerà myDevelopmentPassword.
Ora la vostra password è definita al di fuori del codice. Questo aiuta a evitare che finisca accidentalmente nel repository Git.
Se utilizzate Stackhero in ambiente di produzione, potete definire una nuova variabile d'ambiente chiamata MY_PASSWORD con valore myProductionPassword direttamente dalla dashboard del vostro servizio Node.js. Questo rende semplice mantenere la continuità tra i diversi ambienti.
Esempio di configurazione Node.js sulla dashboard di Stackhero
Con questa configurazione, la password non è più salvata nel codice e potete facilmente utilizzare credenziali diverse per gli ambienti di sviluppo e produzione.
Utilizzare la libreria dotenv
Nei progetti reali, spesso è necessario gestire più segreti. Ad esempio, la connessione a un database può richiedere hostname, username e password.
Gestire un solo segreto è semplice, ma gestirne diversi può diventare rapidamente complicato. Immaginate di avviare l'applicazione con un comando come questo:
POSTGRESQL_HOST=<XXXXXX>.stackhero-network.com POSTGRESQL_USER=admin POSTGRESQL_PASSWORD=myPassword node app.js
Questo approccio diventa presto difficile da leggere e mantenere. In produzione, potreste aver bisogno di ancora più variabili, rendendo questa soluzione poco pratica.
Qui entra in gioco la libreria dotenv.
Con dotenv, potete conservare i segreti in un file separato chiamato .env.
Per iniziare, installate la libreria dotenv eseguendo:
npm install dotenv
Successivamente, create un file .env per inserire le vostre variabili:
POSTGRESQL_HOST=<XXXXXX>.stackhero-network.com
POSTGRESQL_USER=admin
POSTGRESQL_PASSWORD=myPassword
Per mantenere i vostri segreti al sicuro, assicuratevi che il file .env non venga aggiunto al repository Git. Potete farlo aggiungendolo al file .gitignore:
echo ".env" >> .gitignore
Infine, caricate la libreria dotenv all'inizio del file app.js:
require("dotenv").config();
Con questa configurazione, quando avviate l'applicazione con node app.js, dotenv leggerà automaticamente il file .env sulla vostra macchina di sviluppo. In produzione, non è necessario il file .env: le variabili d'ambiente vengono lette direttamente dalla configurazione del servizio Node.js, che potete gestire tramite la dashboard di Stackhero.
Esempio pratico
Ora che abbiamo visto la teoria, vediamo un esempio concreto.
Potete trovare un esempio completo e funzionante qui: https://github.com/stackhero-io/dotenvWithNodejs
Con queste tecniche, potete gestire i vostri segreti in modo flessibile e sicuro, rendendo il processo semplice ed efficiente.