首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加密php中的电子邮件地址

问加密php中的电子邮件地址
EN

Security用户
提问于 2019-12-01 17:28:08
回答 4查看 4.6K关注 0票数 11

我正在建立一个网站,并试图找到一种方式加密用户的电子邮件地址。如果我的数据库被偷了,我的用户的电子邮件不会是纯文本,那就太好了。我认为用户显然需要电子邮件登录,所以如果我用他们的密码加密它,甚至是电子邮件本身,那么我仍然可以构建一个登录功能,这是可行的。

当我需要用户的电子邮件地址时,会出现问题。例如,在密码重置或发送新闻稿的情况下。我可以在数据库中的第二个字段与用户的电子邮件地址,加密的密钥,我知道。

我能加密两个密钥的地方吗?就像一把万能钥匙……还是我太蠢了?

EN

回答 4

Security用户

发布于 2019-12-01 18:46:32

如果您只需要在用户提供电子邮件时验证它,那么就像维达罗那样散列它,就像您将密码散列一样。这里不需要加密。这种方法的另一面是,您永远无法恢复电子邮件,即使您真的需要它(例如,联系您的用户,如评论中所建议的那样)。

如果您需要能够检索电子邮件,然后用您控制的密钥加密它们一次。这里不需要对电子邮件进行两次加密,只需做一次。这个解决方案的棘手部分是把钥匙存放在哪里。

票数 17
EN

Security用户

发布于 2019-12-01 18:14:51

你真的需要用户的电子邮件地址吗?

如果您将电子邮件地址存储为散列(电子邮件+ salt):salt,则可以简单地验证用户提供的电子邮件地址。如果用户请求重新设置密码,只需验证电子邮件地址是否匹配,并将电子邮件发送给提供电子邮件的用户。

如果您希望基于电子邮件地址(例如用户名为电子邮件)在数据库中进行查找,则此模型显然无法工作。然而,正如康纳·曼科内所指出的那样,所有地址的全局胡椒都能工作,但会在一定程度上降低安全性。

这显然消除了您发送时事通讯的可能性。但这意味着数据库泄露不会泄露电子邮件地址。

票数 11
EN

Security用户

发布于 2019-12-02 11:19:14

现有答案的另一种选择:将电子邮件放在单独的机器上&应用程序,并且只将散列存储在主应用程序DB中。

使用散列验证电子邮件。

当您需要发送电子邮件时,您的应用程序将与传递散列+电子邮件消息的其他服务通信,而其他应用程序将发送电子邮件。

很明显,黑客可以侵入第二台机器并访问电子邮件,但是您仍然在添加安全性,因为:

  1. 第二台机器不需要暴露在因特网上。
  2. 辅助计算机可能非常小,它只需要向应用程序公开一个非常有限的API,并且有一个发送电子邮件的服务。
  3. 它可以被锁定很多,因为它只做一件非常具体的事情。

因此,辅助计算机的攻击面可以比应用程序的小得多。

加分:你可以把其他的答案应用到你的第二台机器上,增加更多的安全性(尽管如果你假设你已经被黑了,那就不完美了……)

票数 6
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/222103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档