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

时间:2014-11-30 14:06:55

标签: python django google-app-engine

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

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

  1. 硬编码:不是一个选项,我不想在源代码管理上保密。
  2. 硬编码+混淆:与#1相同 - 攻击者可以运行我的代码来获取秘密。
  3. 存储在环境变量中:我的app.yaml也是源代码控制的。
  4. 在数据库中存储:不确定。数据库在可用性和安全性方面不够可靠。
  5. 存储在非源控制文件中:到目前为止我最喜欢的方法。问题是我需要对文件进行一些备份,手动备份听起来不对。
  6. 我错过了什么吗?是否存在为Django应用程序或App Engine应用程序存储密钥的最佳实践?

2 个答案:

答案 0 :(得分:0)

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

混淆通常不被视为一种良好做法。

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

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

答案 1 :(得分:0)

我见过的解决方案是使用gpg在您的存储库中存储秘密配置的加密副本。根据您团队的结构,您可以对称地加密它并共享密码以解密它或使用核心成员/维护者的公钥对其进行加密。

这样你的秘密就像你的代码一样被备份,而不会让它们变得可见。