python - 为什么我不应该将 django key 存储在 settings.py 中

标签 python django

我不是服务器端方面的专家,但我想知道为什么我不能将 key 留在 setting.py 文件中。 我的意思是,当有人可以看到 settings.py 时,我就已经被黑客攻击了,对吧? 那么我不能把 key 留在现在的位置吗?

最佳答案

有几个原因可以解释为什么从一开始就将所有 key 保存在环境变量中是好的。但我想到了两个:

您可能并不总是在您的网站上工作的唯一开发人员...

假设您从一个小网站开始,您是唯一的开发人员。您将所有 key 等存储在受版本控制的 settings.py 中。

该网站取得了成功,您开始聘请其他一些开发人员与您一起开发您的网站。最终,有些事情你真的不希望每个人都看到,也许只是你和另一个人。

现在,您可以从 settings.py 中删除它们,并将它们移动到环境变量中。但是 settings.py 中的任何内容都可以通过 git 历史记录获得。这将是一个主要的安全漏洞。

它阻止了一个严重的安全问题,并成为一个非常糟糕的问题......

即使有人能够以某种方式看到您的settings.py,这也是非常糟糕的。但如果他们能看到你所有的 secret key ,那就糟糕了一千倍。

  • 如果他们可以看到您的stripe key ,他们现在不仅可以看到您的settings.py,还可以非常轻松地清空您的银行帐户。

  • 如果他们可以看到您的亚马逊 s3 凭据,现在他们只能看到您的 settings.py,他们还可以访问您的用户上传的所有 secret 文档(并且您可以结束解决重大法律问题)。这也意味着他们可以免费使用它,而你最终会收到一大笔账单。

  • 如果他们可以看到您的通用 key ,他们现在可以更轻松地拦截发送到您的服务器或从您的服务器发送的任何消息。如果您使用 pickle 序列化 session 数据,它们甚至可以在您的服务器上运行任意代码,并删除您的数据库(有关更多详细信息,请参阅 here)。

想象一下,您不太明智,并且重复使用了密码,您会收到来自“X 公司”的通知,通知您您的凭据已被泄露。现在有人可以访问您的 github 并查看您的代码。您不必只在 github 上更改密码,而是必须检查您在存储在那里的每个站点上使用的每项服务,并更新所有这些 key (假设损坏尚未造成)。

我们还假设您是明智的,并且您使用 1password 并设置了 2 因素身份验证,因此这种情况不会发生在您身上。所需要的只是你的团队中的一个人不明智地让这种情况再次成为可能,而且是相当现实的可能性。

您肯定希望将所有 key 存储为环境变量。

话虽如此,是的,如果您的系统已被知道自己在做什么的人破坏了,那不会有任何影响,而且您可能处于一个非常糟糕的境地。但是将 secret 存储在环境变量中可以阻止某些攻击,因此无论如何您都应该这样做。

还有...

这对于非安全原因也很有用。您可能需要为您的开发、登台、生产环境提供不同的凭据,并且将内容存储在环境变量中使这变得更加容易。当然,您可以有不同的 settings.py 文件,但是将内容存储在环境变量中意味着您可以快速更新它们,而无需进行发布。

关于python - 为什么我不应该将 django key 存储在 settings.py 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62360851/

相关文章:

python - 使用 ZeroMQ 实现多线程服务器

python - Kibana仪表板时间过滤器选项不起作用

python - 使用 Pandas 或替代方法比较大量 (~40GB) 文本数据

django - 如何在模板中访问Django表单字段名称

Django 在 API 调用时抛出 "Incorrect type. Expected URL string"

python - 错误 : (gcloud. app.deploy) 错误响应:[9] Cloud build c90ad64e-2c2f-4ad0-a250-160de6f315df 状态:FAILURE

Python:编写单元测试失败了

python - 将格式(YYYY-MM-DD)中的日期拆分为数据框中的 3 个新列,即“年”、“月”和“日期”

python - 如何使用groupby制作唯一的用户ID级别数据框?

Django 管理员 : Making mandatory fields non-mandatory dynamically