Django send_mail安全密码

时间:2019-04-11 20:17:46

标签: django security sendmail password-encryption

我正在尝试从应用发送电子邮件,但是在我的设置中,它要求放入EMAIL_HOST_PASSWORD,尽管它可以工作,但是如何保护它免受GitHub或在部署时的侵害?

settings.py:  
EMAIL_HOST='smtp.gmail.com'
EMAIL_HOST_USER='lala@gmail.com'
EMAIL_HOST_PASSWORD=''
EMAIL_PORT=587
EMAIL_USE_TLS=True
EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend'

Views.py:
def contact(request):
    if request.method=='POST':
        message=request.POST['message']

        send_mail('Contact Form', 
        message,
        settings.EMAIL_HOST_USER,
        ['lala@gmail.com'],
        fail_silently=False)
    return render(request, 'first_app/contact.html')

2 个答案:

答案 0 :(得分:0)

在本地计算机上,将敏感数据放入环境变量中。如果您尚未使用过,请检查以下链接:Environment variables tutorial

如果某人克隆了您的项目,那么他当然将无权访问您的环境变量,因此在README中,通过键入自己的电子邮件凭据为用户添加有关如何正确配置项目的信息。 隐藏SECRET_KEY也是非常重要的。

在部署时,这取决于您要将Django项目部署到何处。如果您拥有云计算机,则可以通过SSH连接到它并在其中设置环境变量。我相信许多服务会使部署变得更加容易,并且在配置过程中会询问您要设置的ENV变量。检查Heroku:Heroku

答案 1 :(得分:0)

如上所述,除了存储在环境变量中之外,还可以存储在文件中,因此您可以从该文件读取所有数据,包括用户名和密码,然后应用于您的应用程序。

即使在生产环境中,这也是一个很好的解决方案,因为您可以控制文件权限,因此可以避免例如任何人读取您的凭据的问题。

您可以看看How do I change permissions for a folder and all of its subfolders and files in one step in Linux?

希望有帮助