2013-03-10 2 views
29

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

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

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

ответ

35

Хотя я не смог найти что-либо специфичное для Python для stackoverflow, я нашел website that was helpful и думал, что поделюсь этим решением с остальной частью сообщества.

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

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

В вашем Баш/ш оболочки, тип:

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

А в вашем файле settings.py Джанго:

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

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

+6

... и файл с паролями, установленными на .gitignore –

+0

В двух записях книги Django содержится некоторый код для создания исключения в случае, если переменные среды не существуют в главе 5: https: // django .2scoops.org/ –

+1

В частности, см. Код Two Scoops [на их github] (https://github.com/twoscoops/django-twoscoops-project/blob/master/project_name/project_name/settings/production.py) –

0

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

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

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

Прочитайте сообщение в блоге Environment Variables Considered Harmful for Your Secrets для более аргументов: среда доступна для всего процесса, наследуются к ребенку (и, возможно, третья сторона) процессы, и не существует четкого предположения среди сторонних разработчиков для лечения окружающей среды переменные как конфиденциальные.

Простейший формат файла конфигурации в Python - это просто a Python module.

Смежные вопросы