关于python:我正在努力如何在我的django settings.py中隐藏我的敏感信息

I'm struggling with how to hide my sensitive info in my django settings.py

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
6
7
8
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来调试false,这让我感觉非常新手,非常烦人。


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

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

+1用于在签入机密值之前考虑整个问题。通常,在Github上做一点Google Dorking是非常容易的。


两勺django,django最佳实践中最有价值的文本之一,用以下方式解释了这个问题:您应该创建一个settings目录,在该目录中,您保存了import之间的设置文件层次结构。然后使用--settings开关启动django,并在wsgi.py中配置设置文件。

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

这个问题有一个奥穆斯和吉恩伍德的答案,更详细。这个问题是关于本地和生产环境,而不是关于密钥,请记住。


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