首页 文章

我的应用程序需要发送电子邮件,我应该在哪里以及如何存储SMTP密码?

提问于
浏览
6

似乎我创建的每个应用程序都需要能够发送不定期的电子邮件 . 例如 . 状态电子邮件 . 对于这个问题,假设我的应用程序是一个备份工具,本地安装在许多Windows客户端上,每个安装需要发送每日状态邮件 . 它可以安装在组织的服务器上或私人计算机上 .

我要求用户将凭据提供给他拥有的电子邮件帐户(STMP主机,端口,用户名,密码,来自地址) . 我从像Atlassian Jira / Confluence或JFrog Artifactory这样的应用程序中复制了这种方法 . 他们在哪里以及如何存储SMTP密码?

我目前的理解是:Salting / Hashing方法不适用于此,因为我需要能够检索明文密码以实际发送电子邮件 . 我不想将密码存储在明文中,所以它必须是某种加密/解密方法(对吗?) .

我可以告诉用户不要使用他的主电子邮件帐户,而是使用一些辅助帐户,或者更好的是,设置一个特殊的电子邮件帐户,供我的应用程序使用 . 如果用户是组织的管理员,他可能能够在其Exchange服务器上设置电子邮件帐户或配置SMTP中继 . 但是,我了解我,而且我了解我的私人用户,其中一些人只会使用他们的主电子邮件帐户,所以我想尽我所能保证他们的凭据尽可能安全(我的意思是“遵循最佳做法“) .

我希望将加密的密码存储在应用程序的数据库中 .

我花了几个小时阅读有关stackoverflow的问题,但我看不到共识(就像用户帐户登录凭据一样) . 我觉得这很令人惊讶,因为我希望基本上每个开发人员迟早都要面对这个问题 .

必须有一些最佳实践可以遵循,一些既定的方法来解决这个问题,但我还没有找到它 .

请指出SO /网上的资源,解释如何解决这个问题 . 如果可能的话,由该领域的一些专家撰写 .

我看过一些SO问题:

1 回答

  • 1

    如果你能提供有关操作系统和编程语言的更多细节,那将是件好事......

    不过这里有一些一般的建议:

    您必须知道的最重要的事情是:如果您的应用程序能够解密它(例如用户的密码或硬件令牌),任何攻击者都可以执行此操作 . 您实施的所有措施只会增加获取此密码的复杂性 .

    当然你应该尽可能提高标准 . 对于Windows,DPAPI将是您的朋友 . 你可以在这里找到一些关于如何使用它的信息:http://www.c-sharpcorner.com/UploadFile/mosessaur/dpapiprotecteddataclass01052006142332PM/dpapiprotecteddataclass.aspx with C#(我不知道你使用的是哪种环境) .

    您还可以实现自己的配置,并使用RSA对其进行加密,并将密钥存储在本地密钥容器中 - 请参阅http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider%28v=vs.100%29.aspx .

    也许其他人可以帮助您使用其他操作系统,但这里的概念也是一样的 .

    也可能使用某种SSO身份验证,如Kerberos或NTLM或......,但这意味着对邮件服务器进行修改 .

相关问题