如何保护Gmail的应用程序专用密码

时间:2012-12-21 19:20:04

标签: django security gmail

我们将在接下来的几周内从交换机转换为谷歌托管邮件,我正在试图弄清楚如何设置电子邮件,以便我们可以从django应用程序内部发送

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST='smtp.gmail.com'
EMAIL_HOST_USER='someone@example.com'
EMAIL_HOST_PASSWORD='16characters'
EMAIL_USE_TLS=True
EMAIL_PORT=587

所以这些是我的电子邮件设置,困扰我的部分是16字符应用程序专用密码很快将被提交到我们的git存储库。

如果我尝试在网络前端使用此pw,它会告诉我不要使用特定于应用程序的pw,而是使用我的帐户密码。这很好,至少Web界面不会允许它们进入。但是还有什么可以允许访问/通过?这个密钥在创建时没有任何限制(没有办法对它进行限制,只是一种“命名”它的方式)所以似乎有人可以使用这个密钥与Android手机并完全访问我的帐户,完全违背了双因素身份验证的目的。

那么,当您的应用发送错误报告(500s)或向其他人发送警报时,您如何设法将Google用作电子邮件提供商?我见过的所有smarthost设置都需要用户名/密码,因此它会将其保留在存储库之外,但实际上并没有解决问题。

现在看来我必须从谷歌购买额外的“用户”并为该用户创建ASP以发送电子邮件,如果我想保持我的帐户安全。

PS:刚刚借了一部不同的手机,证明它确实会让他们按预期访问我的账户。好像ASP可能需要将节点锁定到特定IP的能力,或者需要幻像帐户才能发送或者其他东西......

1 个答案:

答案 0 :(得分:1)

如果您认为您的托管环境是安全的,您可以按照存储登录和传入环境变量的方法。有些人认为这是一种最佳做法:http://www.12factor.net/config(它似乎越来越受欢迎)。

然后在你的settings.py中:

  #If you want loud failures, usually the best
  EMAIL_HOST_USER = os.environ['EMAIL_USERNAME']
  EMAIL_HOST_PASSWORD = os.environ['EMAIL_PASSWORD']

  #If you want quiet failures, usually not a good idea
  EMAIL_HOST_USER = os.environ.get('EMAIL_USERNAME', None)
  EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_PASSWORD', None)

如何设置环境变量取决于您的设置,但通常非常直接。

这种方法的优点是可以将密码保留在git仓库中,因此您可以向项目中添加新的协作者,而无需担心他们将接管您的AWS /电子邮件/等帐户