【问题标题】:What is the safest way to store user's email password in database [duplicate]将用户的电子邮件密码存储在数据库中的最安全方法是什么[重复]
【发布时间】:2018-12-26 14:41:23
【问题描述】:

我需要将用户的邮件密码存储在数据库中以便以后发送邮件,但是如何以安全的方式存储密码?

这个密码不能单手加密,因为我以后需要它来使用 SMTP 发送电子邮件

更新

实际上在这种情况下,我可能会在每次发送电子邮件时请求密码或使用 pin 来解密电子邮件的密码。

如何使用要解密的密钥加密字符串?

【问题讨论】:

    标签: php encryption


    【解决方案1】:

    不能单手加密,因为我稍后需要密码才能连接到 smtp

    然后你继续说……

    它不可能是任何人都可以像 md5 一样解密的加密,因为它仍然不安全

    您不能以无法解密的方式加密某些内容,并期望自己能够解密。

    另外,MD5 不是加密,它是一个哈希。单向函数。您不能从 MD5 获取输出并确定性地获取输入。这不可能。 可能的是从已知输入生成“彩虹表”并以这种方式反转。

    您需要的是普通的对称加密。 AES 是这方面的常用方法。这里最重要的是您如何处理您的密钥,因为一旦有人拥有密钥,他们就可以解密数据。首先确保您为每条记录使用不同的密钥。您可以使用密钥派生算法来执行此操作。不过,您仍然需要妥善保管您的主密钥。

    我需要将用户的邮件密码存储在数据库中以便以后发送邮件

    您确定需要这样做吗?考虑替代方案:

    • 代表某人发送电子邮件。通常使用他们的姓名而不是他们的电子邮件地址来发送电子邮件,然后设置Reply-To 以返回给原始用户。
    • 如果您在电子邮件服务器上获得授权,则可以在没有其凭据的情况下代表某人发送电子邮件。

    【讨论】:

    • 永远不要解密用户密码。没有有效的用例。如果您需要代表用户执行操作,请使用 OAuth 流程或某种类型的 API/令牌系统 - 每个邮件提供商都提供这两个选项。建议不安全的方法是我对你投反对票的原因。
    • @Kaylined 偶尔的用例。不要假设每个邮件提供商都支持什么。我自己在与一些丑陋的几十年前的系统交互时遇到过这种情况,我别无选择,只能创建帐户并以这种方式与它们交互。我确实同意这里可能不是这种情况,这就是为什么我在最后添加了那一点以考虑替代方案。
    • @iainn gmail、msexchange、mailchimp、sendgrid、sendpulse,都支持 OAuth - GoDaddy、Gatorhost 和所有低端共享主机也提供某种形式的令牌化身份验证,而不是用户/密码。
    • 在服务器上保存纯文本密码并不安全。必须假设攻击者将获得对服务器的管理员访问权限,因此必须解决此风险。有诸如 HSM 之类的安全解决方案,但它们并不便宜。最好真正考虑您想要创建的服务是否值得将用户密码置于风险之中。
    • @Brad 是的,我打算这样做,从电子邮件发送,显示另一个名称,然后添加客户电子邮件作为回复。但是我的客户想从他的电子邮件域发送,但不想与我共享任何密码。我会尝试说服他创建另一封邮件只是为了触发电子邮件
    猜你喜欢
    • 2010-10-20
    • 2017-08-02
    • 2012-10-25
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 2012-06-23
    • 2014-03-26
    • 1970-01-01
    相关资源
    最近更新 更多