По умолчанию хост / пользователь / пароль базы данных Django хранятся в файле проекта settings.py в виде обычного текст.
Я не могу думать о лучшем способе в настоящее время, но это, кажется, противоречит лучшим методам хранения паролей. Конечно, если у злоумышленника есть доступ к файлу настроек, то, вероятно, все уже потеряно. Даже если файл был зашифрован, злоумышленник, вероятно, будет иметь возможность расшифровать его к тому времени.
Это нормально?
Вы правы, что хранение паролей в открытом виде в файле settings.py не является хорошей защитой. Вы можете повысить безопасность, если:
правильно установите права доступа (это зависит от вашей системы). В идеале только python должен иметь возможность читать файл.
Хранить файл вне www
или htdocs
root. Если в этот момент у злоумышленника все еще есть к ним доступ, вам все равно конец.
Для дополнительной безопасности вы можете зашифровать настройки соединения с помощью симметричного шифрования (например, AES). Храните ключ в другом месте. Таким образом, даже если кому-то удастся получить доступ к настройкам подключения, ему все равно придется искать ключ. Главный недостаток заключается в том, что теперь вам придется переписать метод подключения.
Да, это стандартная процедура для любой программы, взаимодействующей с базой данных. На самом деле нет "лучшего способа" сделать это.
Есть способы предотвратить подключение недействительных хостов (ip-таблицы, частные ip-адреса), но фактические детали подключения почти всегда являются открытым текстом.
Хранение файла вне корня веб-страницы поможет некоторым, но если у злоумышленника есть доступ к файловой системе, это не будет иметь значения.