在App Engine上的Django应用程序上存储客户端机密

Tza*_*ach 7 python django google-app-engine

我有一个使用一些密钥的Django应用程序(例如用于OAuth2/JWT身份验证).我想知道存放这些钥匙的地方在哪里.

以下是我到目前为止找到的方法:

  1. 硬编码:不是一个选项,我不希望我的秘密在源代码控制上.
  2. 硬编码+混淆:与#1相同 - 攻击者可以运行我的代码来获取秘密.
  3. 存储在环境变量中:我app.yaml也是源控制的.
  4. 存储在DB中:不确定.DB在可用性和安全性方面不够可靠.
  5. 存储在非源控制文件中:到目前为止我最喜欢的方法.问题是我需要一些备份文件,手动备份听起来不对.

我错过了什么吗?是否存在为Django应用程序或App Engine应用程序存储密钥的最佳实践?

mim*_*imo 0

您几乎无法向可以访问您的服务器的攻击者隐藏密钥,因为服务器需要知道密钥。但你可以让低权限的攻击者很难做到这一点。

混淆通常不被认为是一种好的做法。

你的选项 5 似乎是合理的。将密钥存储在非源代码控制文件中可以将密钥保存在单个且定义明确的位置。您可以对该文件设置适当的权限,以便攻击者需要高权限才能打开它。还要确保编辑项目的其余部分需要高权限,否则攻击者可以修改项目的随机文件来访问密钥。

我自己在我的项目中使用了你的选项 5。