我正在使用Django,python,virtualenv,virtualenvwrapper和Vagrant。
到目前为止,我只是将secret_key
留在了settings.py
文件中。这适用于本地文件。但是我已经将我的文件放在Git中了。我知道这对于生产来说是不可接受的(Apache)。
隐藏我的secret_key
的正确方法是什么?
我应该使用virtualenv
隐藏它吗?
隐藏秘密有很多不同的方法。
secrets.py
或你有什么,并把你的秘密。将它放在您的设置文件旁边,并将所有内容保密;然后在你的设置文件中将from secrets import *
放在顶部。然后,像Rahul说的那样,添加一个.gitignore
文件并将secrets.py
添加到此文件中,以便它不会被提交。
这种方法的缺点是该文件根本没有源代码控制;如果你输了,那你就是SOL。SetEnv
or PassEnv
directives将环境变量传递给您的进程,然后在设置文件中使用os.environ()
检索它们。这样做的好处在于,在开发过程中,您可以设置新变量(就像VAR1=whatever VAR2=whatever ... ./manage.py runserver ...
一样),或者从用于启动开发项目的任何机制中设置它们。
缺点大致相同;如果你失去了你的Apache配置,你就会受到伤害。secrets
存储库的想法,你把所有的秘密放入并保持锁定和密钥的回购。然后,作为部署过程的一部分,您可以使用git archive
或其他类似命令为您正在部署的位置提取正确的密钥,并且您可以轻松备份并在版本控制下保护您的机密。您还可以将secrets
repo中的相应文件添加到站点存储库的.gitingore
文件中,以便它们不会意外地被提交。
这样做的缺点是您有另一个额外的存储库和另一个部署步骤。我个人认为这是值得的,但这完全取决于你。一般来说,你想要的越安全,访问这些秘密就越不方便。不过,这通常是一个规则。
您可以创建一个名为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
文件中。
注意:
如果您已经将一些敏感数据提交给您的仓库,那么请更改它!
根据Github的removing sensitive data article网站:
如果您提交了密码,请更改密码!如果您提交了密钥,请生成一个新密钥。
检查此link,了解如何从存储库的历史记录中清除文件。
常见的方法,如果您想配置区域,但不想在repo中存储敏感信息,则通过环境变量传递它。当你需要它时,只需致电os.environ('SECRET')
(即使在你的settings.py
)。有一些后备价值更好。
Virtualenv不会帮助您隐藏任何东西,它只是阻止您的系统范围的Python安装乱丢一个项目所需的软件包。