2012-12-21 40 views
4

我們正在從交換切換到谷歌在接下來的幾個星期託管的郵件,我試圖找出如何設置電子郵件,以便我們可以從發送Django的應用程序內如何保證應用程序專用密碼的Gmail

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' 
EMAIL_HOST='smtp.gmail.com' 
EMAIL_HOST_USER='[email protected]' 
EMAIL_HOST_PASSWORD='16characters' 
EMAIL_USE_TLS=True 
EMAIL_PORT=587 

因此,這些都是我的電子郵件設置,困擾我的部分是,16字符的應用程序專用密碼很快被提交到我們的git倉庫。

如果我嘗試使用此PW的web前端,它告訴我不要使用專用PW,而是利用我的賬號密碼。這很好,至少網絡界面不會讓他們進來。但是,這還允許訪問/通過?這個密鑰在創建時沒有任何限制(沒有辦法限制它,只是「命名」它的一種方式)所以看起來有人可以使用這個密鑰與Android手機,並有完全訪問權限我的賬號,徹底擊敗了2因素認證的目的。

那麼,你如何管理時,你的應用程序在發送錯誤報告(用於500S)或警報,其他人使用谷歌作爲電子郵件服務提供商?我見過的所有智能主機設置都需要用戶名/密碼,因此它將其保存在存儲庫中,但實際上並未解決問題。

現在它看起來像我需要購買從谷歌一個額外的「用戶」,並創建了ASP的用戶發送電子郵件,如果我要保持我的帳戶安全。

PS:只是借用了一個不同的電話,並證明它的確會給他們訪問我的帳戶預期。好像ASP也許需要節點將其鎖定到特定IP的能力,或者需要有用於發送或東西幻影帳戶...

+1

我相信你假設是正確的。您需要通過其他SMTP提供商發送電子郵件,或者設置其他Google Apps用戶帳戶。另一個Google Apps帳戶也會產生安全隱患,因爲用戶可以通過非網絡界面登錄該帳戶並查看消息 - 例如,反彈等 – SilverlightFox

回答

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) 

你如何設置環境變量取決於你的設置,但它通常是非常簡單的。

這種方法有保守祕密了混帳回購協議的優點,這樣你就可以不用擔心到項目增加新的合作者,他們打算接管你的AWS /電子郵件/等佔

+0

到目前爲止,這是我聽到的最好的主意。是的,我們主持虛擬機,所以我們擁有整個「機器」。 – boatcoder

+0

如何在Amazon EC2中正確設置Django應用程序的環境變量?如何爲不同的設置(Apache vs Nginx/Gunicorn)做到這一點?我喜歡使用流行的PaaS的CLI工具(例如Heroku Toolbelt)添加env vars的簡單性。 –