我使用Python和Django创建Web应用程序,我们将其存储在源代码管理中.按照通常设置Django的方式,密码在settings.py文件中是纯文本的.

以纯文本形式存储密码会让我面临许多安全问题,尤其是因为这是一个开源项目,我的源代码将受到版本控制(通过git,在Github上,让全世界都能看到!)

问题是,在Django/Python开发环境中安全地编写settings.py文件的最佳实践是什么?

推荐答案

虽然我在stackoverflow上没有遇到任何特定于Python的东西,但我确实找到了一个website that was helpful,并认为我应该与社区的其他人分享这个解决方案.

解决方案:环境变量.

注意:尽管Linux/Unix/OS X和Windows世界中的环境变量相似,但我还没有在Windows机器上测试过这段代码.请让我知道它是否有效.

在bash/sh shell中,键入:

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", '')

在这种情况下,如果环境变量不存在,用户名和密码将默认为空字符串.

Django相关问答推荐

Djnago admin中 Select 字段的自定义查询

""关系"core_Boundary_summary的列user_id中的空值"违反了非空约束|失败行包含(2,title,string,null)

APIView查询未返回任何结果

Django:如何 Select 没有其他项目引用的项目?

SQLite上可以正常使用Many2Many链接注释,但MariaDB上无法正常使用(生产环境)

CsrfViewMiddleware 和 enforce_csrf 有什么区别?

在 Django 4.1 中提交表单之前显示数据

Django ORM:子查询上的文本聚合器

基于模型多选字段在模板django中显示结果

在用例图中建模前端和后端

Django 模板:翻译带有 HTML 的文本块的最佳实践

如何让 Django 在模板更改时重新启动运行服务器?

Django REST Framework - 将额外参数传递给操作

Django:get_or_create 使用 together_unique 引发重复条目

在 django 模板中遇到 user.is_authenticated 问题

Django 存储匿名用户数据

如何在保存之前更改 Django 表单字段值?

在 PyPy 下运行 Django 的缺点?

Django 应用程序运行良好,但收到 TEMPLATE_* 警告消息

使用 request.user 的 Django 和中间件始终是匿名的