我正在努力解决如何在我的 django settings.py 中隐藏我的敏感信息 [重复]

Posted

技术标签:

【中文标题】我正在努力解决如何在我的 django settings.py 中隐藏我的敏感信息 [重复]【英文标题】:I'm struggling with how to hide my sensitive info in my django settings.py [duplicate] 【发布时间】:2016-09-22 05:28:41 【问题描述】:

我真的很难在我的 django settings.py 中隐藏我的敏感材料我尝试为本地和生产创建一个单独的设置文件,发现 here 人们建议然后中途停止。我还尝试在我的核心文件中创建一个名为 secrets.py 的文件,其中我的 wsgi 和设置是等,并尝试这样做

DEBUG = True

if DEBUG:
    from .secrets import SECRET_KEY_LO
    this = SECRET_KEY_LO
    SECRET_KEY = this
else:
    SECRET_KEY = os.environ['SECRET_KEY']

但这没有用。专业的编程方式是什么?所以我不必一直手动将 DEBUG true 更改为 DEBUG false 感觉很新手,可能会很烦人

【问题讨论】:

没用是什么意思? 【参考方案1】:

您可以使用config.json 文件来保存您的所有秘密。您可以将此文件添加到您的.gitignore,这样它就不会上传到您在云中的存储库(例如 GitHub)。 然后你可以让你的 settings.py 文件读取 config.json 文件并开始将值分配给所需的 Python 变量。

【讨论】:

【参考方案2】:

看看django-configurations。它内置了对输入非机密默认值的支持,然后在 Prod 中使它们成为必需的和不同的。这些值是通过环境变量提供的,因此它会将问题向下移动一点。

一旦您在其中获得了用于测试的良好值,您就面临着如何将秘密值保密的部署问题。每个 PAAS 似乎都有自己的版本,就像许多配置管理(Chef、Puppet、Salt、Ansible 等)系统一样。我发现最好的方法之一是在 AWS 部署中使用 credstash。您在服务器上的启动脚本只需要对 credstash get 进行几次调用,然后将这些值作为 ENV 变量传递给 gunicorn / uwsgi / 不管什么,然后 django-configurations 会选择并应用它们。这显然取决于 AWS,因此这取决于您部署的位置,但基本思想仍然相同。获取秘密值并通过 ENV 将其提供给您的服务。

+1 用于在签入秘密值之前考虑整个问题。通常,在 github 上为这类事情做一些 google dorking 非常容易。

【讨论】:

【参考方案3】:

Two scoops of django,关于 Django 最佳实践的最有价值的文本之一以下列方式解释了此问题:您应创建一个 settings 目录,在其中保留 import 彼此之间的设置文件层次结构。然后您将使用--settings 开关启动django,并在wsgi.py 中配置设置文件。

然后您构建一个文件(例如 local_secret.py),其中仅包含密钥(API 密钥等)和 import 其余文件中的其余设置。您将 local_secrets.py 保留在代码存储库之外(例如使用 .gitignore)。

This question has an answer by omouse and gene_wood 更详细。这个问题是关于本地和生产环境的,而不是关于密钥的,请记住这一点。

【讨论】:

感谢您的回复。我实际上在此之前尝试过,但我一直在出错。它不会让我执行 git push heroku master 而不给我一个错误 一个失败的git push heroku master(我想)是由于未跟踪的文件而发生的。这意味着.gitignore 没有忽略您的文件,或者.gitignore 没有被提交,heroku 永远不会看到它。

以上是关于我正在努力解决如何在我的 django settings.py 中隐藏我的敏感信息 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

请问如何在我的 url.py django 3 中使用 slug 创建 url?

将表单保存到数据库(Django Python)

Django 中的 Jquery:我应该研究哪些 django 应用程序?

使用 Django Rest 框架的 Mysql 多连接性能

如何禁用 HTML 选择蓝色背景?

django oauth 工具包 unsupported_grant_type 错误