Подтвердить что ты не робот

Python/Django - избегать сохранения паролей в исходном коде

Я использую Python и Django для создания веб-приложений, которые мы сохраняем в исходном управлении. Как обычно настраивается Django, пароли находятся в текстовом формате в файле settings.py.

Сохранение моего пароля в текстовом виде приведет меня к ряду проблем безопасности, особенно потому, что это проект с открытым исходным кодом, и мой исходный код будет контролироваться версией (через git, на Github, для всего мира см!)

Вопрос в том, что было бы лучшей практикой безопасного написания файла settings.py в среде разработки Django/Python?

4b9b3361

Ответ 1

Хотя я не смог найти что-либо специфичное для Python в stackoverflow, я нашел сайт, который был полезен, и подумал, что я "Разделите решение с остальной частью сообщества.

Решение: переменные среды.

Примечание. Хотя переменные окружения аналогичны как в Linux/Unix/OS X, так и в мире Windows, я не тестировал этот код на машине Windows. Пожалуйста, дайте мне знать, если это сработает.

В вашей оболочке bash/sh введите:

export MYAPP_DB_USER='myapp'
export MYAPP_DB_PASSWORD='testing123'

И в файле настроек Django settings.py:

DATABASE_USER = os.environ.get("MYAPP_DB_USER", '')
DATABASE_PASSWORD = os.environ.get("MYAPP_DB_PASSWORD", '')

В этом случае имя пользователя и пароль по умолчанию будут иметь пустую строку, если переменная среды не существует.

Ответ 2

Хотя переменные среды удобны для большой конфигурации, размещение паролей в переменных среды не secure. Альтернативой является файл конфигурации вне регулярного контроля версий, вот несколько различных минусов:

  • Переменные среды могут случайно протекать (через отладочные каналы, которые могут передаваться через открытый текст, конечным пользователям или в неожиданные места в файловой системе, например ~/.* sh_history).

  • Конфигурационные файлы могут случайно добавляться в управление версиями и заканчиваться в репозиториях, доступных для людей без прав на развертывание.

Прочтите сообщение в блоге Переменные среды, считающиеся вредными для ваших секретов, для получения дополнительных аргументов: среда доступна для всего процесса, наследуется до дочерних (и, возможно, сторонних) процессов, и не существует четкого предположения среди внешних разработчиков относиться к переменным среды как к конфиденциальным.

Самый простой формат файла конфигурации в Python - это просто модуль Python.