Security 我的应用程序需要发送电子邮件,我应该在哪里以及如何存储SMTP密码?
似乎我创建的每个应用程序都需要能够偶尔发送电子邮件。例如,状态电子邮件。对于这个问题,假设我的应用程序是一个备份工具,本地安装在许多windows客户端上,每次安装都需要发送每日状态邮件。它可以安装在组织的服务器或专用计算机上 我要求用户向其拥有的电子邮件帐户(STMP主机、端口、用户名、密码、发件人地址)提供凭据。我从Atlassian Jira/Confluence或JFrog Artifactory等应用程序中复制了这种方法。他们在哪里以及如何存储SMTP密码 我目前的理解是:盐析/哈希方法不适用于这里,因为我需要能够检索明文密码来实际发送电子邮件。我不想以明文形式存储密码,所以必须采用某种加密/解密方法(对吗?) 我可以告诉用户不要使用他的主电子邮件帐户,而是使用一些辅助帐户,或者更好的是,设置一个特殊的电子邮件帐户供我的应用程序使用。如果用户是某个组织的管理员,则可以在其exchange服务器上设置电子邮件帐户或配置SMTP中继。但是,我了解我,我也了解我的私人用户,他们中的一些人无论如何只会使用他们的主电子邮件帐户,所以我想尽我所能确保他们的凭据尽可能安全(我的意思是“遵循最佳实践”) 我更愿意将加密密码存储在应用程序的数据库中 我花了好几个小时阅读有关stackoverflow的问题,但我看不到一致意见(就像用户帐户登录凭据一样)。我觉得这很奇怪,因为我预计基本上每个开发人员迟早都会遇到这个问题 一定有一些最佳实践可以遵循,一些既定的方法可以做到这一点,但我还没有找到 请给我指一下SO/网站上解释如何解决这个问题的资源。如果可能,由该领域的专家撰写 我看到的一些问题:Security 我的应用程序需要发送电子邮件,我应该在哪里以及如何存储SMTP密码?,security,passwords,password-protection,email,password-encryption,Security,Passwords,Password Protection,Email,Password Encryption,似乎我创建的每个应用程序都需要能够偶尔发送电子邮件。例如,状态电子邮件。对于这个问题,假设我的应用程序是一个备份工具,本地安装在许多windows客户端上,每次安装都需要发送每日状态邮件。它可以安装在组织的服务器或专用计算机上 我要求用户向其拥有的电子邮件帐户(STMP主机、端口、用户名、密码、发件人地址)提供凭据。我从Atlassian Jira/Confluence或JFrog Artifactory等应用程序中复制了这种方法。他们在哪里以及如何存储SMTP密码 我目前的理解是:盐析/哈希方
- 如果您能提供更多关于操作系统和编程语言的详细信息,那就太好了
但以下是一些一般性建议:
您必须知道的最重要的一点是:如果您的应用程序能够在无需用户交互的情况下对其进行解密(例如,用户的密码或硬件令牌),则任何攻击者都能够做到这一点。您实施的所有措施只会增加获取此密码的复杂性
当然,你应该尽可能地把横杆抬高。对于Windows,DPAPI将是您的朋友。您可以在这里找到一些关于如何使用它的信息,例如:使用C#(我不知道您使用的是哪个环境)
您还可以实现自己的配置,并使用RSA加密配置,并将密钥存储在本地密钥容器中-请参阅
也许其他人可以帮助你使用其他操作系统,但概念是一样的
也可以使用某种SSO身份验证,如Kerberos、NTLM或…,但这意味着对邮件服务器进行修改