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

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

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

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

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

最佳答案
您几乎无法隐藏可以访问您的服务器的攻击者的密钥,因为服务器需要知道密钥.但是对于具有低权限的攻击者来说,你可能会很难.

混淆通常不被视为良好做法.

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

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

转载注明原文:在App Engine上的Django应用程序上存储客户端机密 - 代码日志