似乎我创建的每个应用程序都需要能够偶尔发送电子邮件。例如。状态电子邮件。对于这个问题,假设我的应用程序是一个备份工具,本地安装在许多Windows客户端上,每个安装需要发送每日状态邮件。它可以安装在组织的服务器上或私人计算机上。
我要求用户将凭据提供给他拥有的电子邮件帐户(STMP主机,端口,用户名,密码,来自地址)。我从像Atlassian Jira / Confluence或JFrog Artifactory这样的应用程序中复制了这种方法。他们在哪里以及如何存储SMTP密码?
我目前的理解是:Salting / Hashing方法不适用于此,因为我需要能够检索明文密码以实际发送电子邮件。我不想将密码存储在明文中,所以它必须是某种加密/解密方法(对吗?)。
我可以告诉用户不要使用他的主电子邮件帐户,而是使用一些辅助帐户,或者更好的是,设置一个特殊的电子邮件帐户,供我的应用程序使用。如果用户是组织的管理员,他可能能够在其Exchange服务器上设置电子邮件帐户或配置SMTP中继。但是,我了解我,而且我了解我的私人用户,其中一些人只会使用他们的主电子邮件帐户,所以我想尽我所能保证他们的凭据尽可能安全(我的意思是“遵循最佳做法“)。
我希望将加密的密码存储在应用程序的数据库中。
我花了几个小时阅读有关stackoverflow的问题,但我看不到共识(就像用户帐户登录凭据一样)。我觉得这很令人惊讶,因为我希望基本上每个开发人员迟早都要面对这个问题。
必须遵循一些最佳实践,一些既定的方法,但我还没有找到它。
请指出SO /网上的资源,解释如何解决这个问题。如果可能的话,由该领域的一些专家撰写。
我看过一些问题:
答案 0 :(得分:1)
如果你能提供有关操作系统和编程语言的更多细节,那就太好了......
但是这里有一些一般性建议:
您必须知道的最重要的事情是:如果您的应用程序能够解密而无需用户交互(例如用户的密码或硬件令牌),任何攻击者都可以执行此操作它。您实施的所有措施只会增加获取此密码的复杂性。
当然你应该尽可能提高标准。对于Windows,DPAPI将是您的朋友。你可以在这里找到一些关于如何使用它的信息:http://www.c-sharpcorner.com/UploadFile/mosessaur/dpapiprotecteddataclass01052006142332PM/dpapiprotecteddataclass.aspx和C#(我不知道你使用的是哪个环境)。
您还可以使用带有存储在本地密钥容器中的密钥的RSA来实现您自己的配置并对其进行加密 - 请参阅http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider%28v=vs.100%29.aspx。
也许其他人可以帮助您使用其他操作系统,但其中的概念也是如此。
也可能使用某种SSO身份验证,如Kerberos或NTLM或......,但这意味着对邮件服务器进行修改。