Utilizzare le variabili d'ambiente in Node.js
Utilizzo di dotenv
Gestione sicura di segreti e token API
Articolo correlato: Proteggi i tuoi token
Facciamo un rapido riepilogo della differenza concettuale tra segreta e non segreta.
- 🔒 Le
chiavi segreterichiedono l’uso di un server custom (es. Node/Express/Heroku) per nascondere (proxy) le richieste verso servizi API di terze parti. - 🌍 Le
chiavi non segreteindicano chiavi che possono essere inviate in chiaro al browser.
In questo articolo ci concentreremo sulla gestione delle 🔒
chiavi segretetramite Variabili d’Ambiente.
Gli esempi di codice sono inclusi di seguito.
Panoramica
Per accedere in modo sicuro ai segreti nel tuo codice NodeJS:
- Sostituisci le chiavi hard-coded con variabili d’ambiente. Es.
process.env.API_SECRET - Utilizza una libreria come
dotenvinsieme a un file.env. Aggiungi i segreti precedentemente hard-coded al file.env. - Verifica la presenza della riga
.envnel tuo file.gitignore!
NON creare un file
.envsui server in produzione. Utilizza lo strumento di gestione delle variabili d’ambiente fornito dal tuo provider di hosting (es. Heroku, Netlify, AWS EC2): es. dashboard o riga di comando.
Esempio di codice
Definiremo alcuni file.
.env./db/connection.js./api/users.js
Innanzitutto, installa il pacchetto dotenv.
npm install dotenvSuccessivamente, crea un file .env nella directory root del progetto.
PGDATABASE="postgres"PGHOST="localhost"PGPORT=5234PGUSER="postgres"PGPASSWORD="password"❌ MAI eseguire il commit del file .env.
❌ Evita di creare file .env sui server.
Consulta la documentazione del tuo Hosting Provider per configurare le variabili d’ambiente.
Per assicurarti facilmente che il tuo .gitignore contenga una riga per .env.
# Automatically update .gitignore# Run in terminal:[ "$(grep '^.env' .gitignore)" == "" ] && echo '.env' >> .gitignore# note: no output will printIl file ./db/connection.js fornisce un’istanza condivisa di pg.Pool. Verrà utilizzata per eseguire query sul database.
require('dotenv').config(); // ✅ Load .env fileconst pg = require('pg');const {PGUSER, PGHOST, PGPORT} = process.env;
if (process.env.NODE_ENV === 'development') console.log(`Connecting to ${PGUSER} @ ${PGHOST}:${PGHOST}`);// ^^ only for showing debug connection vars
// pg automatically uses PG* env variablesmodule.exports = new pg.Pool();La cartella ./api contiene le interfacce verso le tue tabelle/viste.
Ecco un esempio di ./api/users.js per la tabella users.
const db = require('../db/connection.js');
module.exports = { findUsername: function(username) { return db.query('SELECT * FROM users WHERE username=$1', username); }};- Non eseguire mai il commit dei segreti
.envsu git! - Non condividere i file
.envall’interno del team. *
* Ogni nuovo laptop o desktop di sviluppo dovrebbe generare nuove chiavi di accesso e token.
Se non è possibile, presta molta attenzione quando condividi il tuo .env (nei casi in cui un servizio potrebbe invalidare tutte le chiavi precedenti, o disponi di un token di accesso limitato per un’API a pagamento.)
⚠️ Importante: se necessario, utilizza sempre un servizio di messaggistica sicura (preferibilmente con supporto per messaggi a scadenza.)
Buona fortuna e fammi sapere se hai domande! 🎉