我正在开发一个依赖于来自一个或多个第三方网站的数据的网络应用程序。这些网站不提供任何类型的身份验证API,因此我使用非官方API从第三方网站检索数据。
我计划向用户询问他们在第三方网站上的凭据。我理解这要求用户信任我和我的工具,并且我打算通过尽可能安全地存储凭证来尊重这种信任,并明确分享其凭据的风险。
我知道今天有一些流行的工具可以解决这个问题。例如,Mint.com要求用户的财务帐户凭据,以便它可以定期检索交易信息。 LinkedIn要求用户的电子邮件凭据,以便它可以收集他们的联系人。
存储用户凭据的安全设计是什么?特别是,我正在编写一个Django应用程序,可能会建立在PostgreSQL后端之上,但我对其他想法持开放态度。
对于它的价值,从这些第三方站点访问的数据远不及金融帐户,电子邮件帐户或社交网络配置文件/帐户的级别。也就是说,我打算以最大的尊重对待这种访问,这就是我首先在这里寻求帮助的原因。
答案 0 :(得分:1)
在存储密码/机密时,没有安全的设计。只有,你愿意承担多少安全开销权衡。以下是我认为你应该做的最低限度:
答案 1 :(得分:1)
除了2ps所说的:
有一个名为django-cryptographic-fields的项目,它使用Django处理在Postgres数据库中存储加密数据。
如上面链接的README中所述:
django-cryptographic-fields是一组字段,它们使用python加密库提供的加密来包装标准Django字段。这些字段与12因素设计更加兼容,因为它们从设置文件中获取加密密钥,而不是keyczar使用的磁盘上的文件。
虽然keyczar是用于加密的优秀工具,但事实却并非如此 与Python 3兼容,对于像Heroku这样的主机,它需要 你要么将你的密钥文件检查到你的git仓库中 部署,或实现手动部署后处理来编写 存储在环境变量中的密钥到keyczar可以的文件中 读取。