Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 在执行电子邮件身份验证的视图中保护python文件中密码的最佳实践_Django_Git_Security - Fatal编程技术网

Django 在执行电子邮件身份验证的视图中保护python文件中密码的最佳实践

Django 在执行电子邮件身份验证的视图中保护python文件中密码的最佳实践,django,git,security,Django,Git,Security,我不希望我的多封电子邮件的密码可以在github上免费使用 我担心多个视图会发送不同用途的电子邮件。这些视图分布在整个项目中,并公开显示我们电子邮件帐户的密码 例如: def send_enq_mail(user): user_email = user.email name = user.userprofile my_host = 'smtp.zoho.com' my_port = 587 my_username = 'admin@abcd.com'

我不希望我的多封电子邮件的密码可以在github上免费使用

我担心多个视图会发送不同用途的电子邮件。这些视图分布在整个项目中,并公开显示我们电子邮件帐户的密码

例如:

def send_enq_mail(user):
    user_email = user.email
    name = user.userprofile
    my_host = 'smtp.zoho.com'
    my_port = 587
    my_username = 'admin@abcd.com'
    my_password = 'Password'
    my_use_tls = True
    connection = get_connection(host=my_host,
                                port=my_port,
                                username=my_username,
                                password=my_password,
                                use_tls=my_use_tls)
    template = ''
    html_content = template.format(name)
    subject, from_email, to = '' 'admin@abcd.com', user_email
    text_content = ''
    connection.open()
    msg = EmailMultiAlternatives(subject, text_content, from_email, [to], connection=connection)
    msg.attach_alternative(html_content, "text/html")
    msg.send()
    connection.close()
现在,我已经在settings.py中使用了默认电子邮件,git不会跟踪该电子邮件,并且该文件在github中不是公共的。但我不能对分布在整个项目中的多个文件执行相同的操作


那么,在这种情况下,我的最佳选择是什么呢。我的意思是,经验丰富的开发人员可能正在使用某些最佳实践。请共享。

我建议您至少将登录凭据或整个登录逻辑放在一个单独的本地文件中,然后从中读取/包括该文件,并使用
git ignore
防止将该文件上载到GitHub(并修改
.htaccess
以防止您的web服务器为其提供服务)。这还可以让您在必要时更轻松地更新凭据,因为每次安装都有一个参考点(该文件)。

我建议您至少将登录凭据或整个登录逻辑放在一个单独的本地文件中,然后从该文件中读取/包括,并使用
git ignore
阻止将所述文件上载到GitHub(并修改
.htaccess
以阻止您的web服务器为其提供服务)。这还可以让您在必要时更轻松地更新凭据,因为每次安装都有一个参考点(该文件)。

不要将敏感数据存储在VCS下。这是最好的解决办法。即使您忽略了该文件,也可能会意外地将其公开,例如由新来者公开。你必须意识到,互联网上暴露出来的任何数据都是安全的。你不能只是为了确保没有人窃取你的密码


就我个人而言,我喜欢亚当·威金斯在他的“12因素应用程序”中的方式。基本上,他说你应该在应用程序运行的环境中存储任何动态配置,包括密码。这可能是使用任何编程语言的环境变量,也可能是特定于应用程序的解决方案,如Java属性(
-Dprop=value
)。

不要在VCS下存储敏感数据。这是最好的解决办法。即使您忽略了该文件,也可能会意外地将其公开,例如由新来者公开。你必须意识到,互联网上暴露出来的任何数据都是安全的。你不能只是为了确保没有人窃取你的密码


就我个人而言,我喜欢亚当·威金斯在他的“12因素应用程序”中的方式。基本上,他说你应该在应用程序运行的环境中存储任何动态配置,包括密码。这可能是与任何编程语言一起使用的环境变量,也可能是特定于应用程序的解决方案,如Java属性(
-Dprop=value
)。

如果要避免在代码中保存此信息,请更改邮件发送功能,如下所示:

 def send_enq_mail(user, server_info):
      connection = get_connection(host=server_info.host,
                            port=server_info.port,
                            username=server_info.username,
                            password=server_info.password,
                            use_tls=server_info.tls)
现在,服务器信息可以是动态创建的任何对象。这种方法还可以帮助您提高代码的干燥度。数据可能来自未签入vcs的配置文件。或者,数据可以来自数据库

class ServerInfo(models.Model):
    host = models.CharField()
    post = models.IntegerField()
    ....

如果要避免在代码中保存此信息,请按如下方式更改邮件发送功能:

 def send_enq_mail(user, server_info):
      connection = get_connection(host=server_info.host,
                            port=server_info.port,
                            username=server_info.username,
                            password=server_info.password,
                            use_tls=server_info.tls)
现在,服务器信息可以是动态创建的任何对象。这种方法还可以帮助您提高代码的干燥度。数据可能来自未签入vcs的配置文件。或者,数据可以来自数据库

class ServerInfo(models.Model):
    host = models.CharField()
    post = models.IntegerField()
    ....

这与您在设置中使用的电子邮件设置相同吗?如果您在多个文件中执行此操作。。。嗯,重复代码从来都不是一件好事,您可以将该逻辑封装在一个文件中,该文件包含在您需要的地方?这样你就能更容易地处理它了。此外,在任何情况下,您都不应该硬编码密码。从不。不,它是settings.py以外的文件中的多个函数之一。我指的是项目中的normalviews.py。@Renan不,主要是我没有重复代码。但由于进口问题和其他原因,我不得不在某些地方重复代码。假设我将这些文件包含到一个或两个文件中,那么即使是我也不愿意将它们从git中分离出来。有什么解决方案。是的,在很多地方,我会在设置中覆盖电子邮件后端。py这与您在设置中使用的电子邮件设置相同吗?如果您在多个文件中执行此操作。。。嗯,重复代码从来都不是一件好事,您可以将该逻辑封装在一个文件中,该文件包含在您需要的地方?这样你就能更容易地处理它了。此外,在任何情况下,您都不应该硬编码密码。从不。不,它是settings.py以外的文件中的多个函数之一。我指的是项目中的normalviews.py。@Renan不,主要是我没有重复代码。但由于进口问题和其他原因,我不得不在某些地方重复代码。假设我将这些文件包含到一个或两个文件中,那么即使是我也不愿意将它们从git中分离出来。是的,在很多地方,我在设置中覆盖了电子邮件后端。py这两个很棒的链接非常有用。这两个很棒的链接非常有用。