如何使用virtualenv和Django隐藏我的secret_key?

问题描述 投票:7回答:3

我正在使用Django,python,virtualenv,virtualenvwrapper和Vagrant。

到目前为止,我只是将secret_key留在了settings.py文件中。这适用于本地文件。但是我已经将我的文件放在Git中了。我知道这对于生产来说是不可接受的(Apache)。

隐藏我的secret_key的正确方法是什么?

我应该使用virtualenv隐藏它吗?

python django virtualenv
3个回答
5
投票

隐藏秘密有很多不同的方法。

  1. 使用另一个非版本化文件。 创建一个新的文件secrets.py或你有什么,并把你的秘密。将它放在您的设置文件旁边,并将所有内容保密;然后在你的设置文件中将from secrets import *放在顶部。然后,像Rahul说的那样,添加一个.gitignore文件并将secrets.py添加到此文件中,以便它不会被提交。 这种方法的缺点是该文件根本没有源代码控制;如果你输了,那你就是SOL。
  2. 使用环境变量。 使用Apache SetEnv or PassEnv directives将环境变量传递给您的进程,然后在设置文件中使用os.environ()检索它们。这样做的好处在于,在开发过程中,您可以设置新变量(就像VAR1=whatever VAR2=whatever ... ./manage.py runserver ...一样),或者从用于启动开发项目的任何机制中设置它们。 缺点大致相同;如果你失去了你的Apache配置,你就会受到伤害。
  3. 将第二个存储库与方法1结合使用。 就个人而言,我喜欢有一个专门的secrets存储库的想法,你把所有的秘密放入并保持锁定和密钥的回购。然后,作为部署过程的一部分,您可以使用git archive或其他类似命令为您正在部署的位置提取正确的密钥,并且您可以轻松备份并在版本控制下保护您的机密。您还可以将secrets repo中的相应文件添加到站点存储库的.gitingore文件中,以便它们不会意外地被提交。 这样做的缺点是您有另一个额外的存储库和另一个部署步骤。我个人认为这是值得的,但这完全取决于你。

一般来说,你想要的越安全,访问这些秘密就越不方便。不过,这通常是一个规则。


3
投票

您可以创建一个名为secret_settings.py的文件,并将SECRET_KEY放在此文件中。然后将此文件添加到.gitignore。然后在您的设置中,您可以删除密钥变量并从那里导入它。这应该确保SECRET_KEY变量仍然不受版本控制。

创建一个名为secret_settings的文件,然后将SECRET_KEY和其他秘密设置放入其中。

SECRET_KEY = .. # add your setting here

然后在您的settings.py文件中,导入这些设置。

from secret_settings import *

最后,将secret_settings.py添加到您的.gitignore文件中。

注意:

如果您已经将一些敏感数据提交给您的仓库,那么请更改它!

根据Githubremoving sensitive data article网站:

如果您提交了密码,请更改密码!如果您提交了密钥,请生成一个新密钥。

检查此link,了解如何从存储库的历史记录中清除文件。


1
投票

常见的方法,如果您想配置区域,但不想在repo中存储敏感信息,则通过环境变量传递它。当你需要它时,只需致电os.environ('SECRET')(即使在你的settings.py)。有一些后备价值更好。

Virtualenv不会帮助您隐藏任何东西,它只是阻止您的系统范围的Python安装乱丢一个项目所需的软件包。

© www.soinside.com 2019 - 2024. All rights reserved.