Proteggere i Tuoi Token, Chiavi API e Segreti
Pubblico? Privato? Wat?
Quando proteggere i tuoi token?
Mettere in sicurezza le chiavi API e i token è fondamentale!
Un errore può portare alla perdita del controllo del tuo server e dei dati da parte degli hacker!
Non dovrebbe essere così difficile determinare se un particolare token debba essere nascosto, anche basandosi sulla documentazione ufficiale!
Spesso la situazione è aggravata dalla zuppa di termini correlati che incontrerai: token, chiavi, credenziali, segreti, privati e pubblici.
Riformuliamo il concetto distinguendo tra segreto e non segreto.
- 🔒
Chiavi segreteDEVONO essere mantenute nascoste. In generale, non dovrebbero MAI lasciare il tuo server privato (o servizio - come Heroku, Netlify o Travis CI). - 🌍
Chiavi non segretedescrive stringhe che potrebbero essere condivise liberamente e incluse nelle richieste del browser.
🔒 Chiavi segrete
** ‼️ Importante:** le chiavi segrete DEVONO essere ignorate da Git E omesse in tutto il codice del browser. Come usare dotenv
Come fai a sapere quando hai a che fare con una chiave segreta?
👍 Regola pratica: i server che restituiscono errori CORS non supportano il browser. Indica fortemente che DEVI usare un proxy per il servizio, trattandolo come se fosse segreto.
👍 Regola pratica: i servizi costosi dovrebbero (quasi) sempre essere nascosti o usati tramite proxy.
👍 Regola pratica: se esegui un’operazione di scrittura (upload di file, inserimento di righe nel db), potresti avere a che fare con chiavi segrete.
Casi d’uso e funzionalità: chiavi segrete
- Autorizzazione a lungo termine (credenziali, token di accesso, JSON Web Tokens)
- Autorizzazione a breve termine (token OAuth, archiviazione sessioni)
- Accesso a servizi a pagamento/costosi (per auth, geocoding, archiviazione file, ecc.)
- Parte privata di una coppia pubblica/privata (RECAPTCHA, Stripe, Auth0)
- Credenziali di servizio (Email/SMTP, LDAP/Directory Services)
- Crittografia dei dati e controllo dell’integrità
Checklist: Gestire i Segreti in Modo Sicuro
Panoramica Rapida
Completa i seguenti passaggi per eliminare i segreti dal tuo codice:
- Sostituisci le chiavi hardcoded con variabili d’ambiente. es.
process.env.API_SECRET - Usa una libreria come
dotenvinsieme a un file.env. Aggiungi i tuoi segreti precedentemente hardcoded al file.env. - Aggiungi una riga
.envnel tuo file.gitignore!
NON creare un file
.envsui server distribuiti. Usa lo strumento di gestione delle variabili d’ambiente fornito dal tuo servizio di hosting (es. Heroku, Netlify, AWS EC): ad esempio dashboard o riga di comando.
Articolo Correlato: Usare dotenv in modo sicuro in NodeJS
🌍 Chiavi non segrete
👍 Regola pratica: ogni volta che una chiave deve essere inviata al browser nel codice o inline (es. tramite un tag <script src="https://my-api/?apiKey=123-abc-456">), è sicuramente una chiave non segreta. Un esempio comune è Google Maps.
Casi d’uso e funzionalità: chiavi non segrete
- Accesso a breve termine (ID sessione utente, JSON Web Tokens)
- Limitazione dell’accesso API per app/sviluppatore (per auth, geocoding, ecc.)
- Parte pubblica di una coppia pubblica/privata (RECAPTCHA, Stripe, Auth0)
- ID di analytics
✅ Gestione dei Non-Segreti:
È sicuro hardcoded le chiavi non segrete (pubbliche)!
Rendi tutto più facile da gestire a lungo termine con un config.js condiviso per la tua app.
Esempio:
module.exports = { googleMapsKey: '123-abc'};const config = require('./config.js');const key = config.googleMapsKey;const src = `//maps.googleapis.com/maps/api/js?key=${key}`;// ...Nota: ci sono altri casi d’uso per le variabili d’ambiente. Alcuni che non ho trattato: CI/CD/testing, feature flag e configurazione di runtime per ambienti speciali!