我正在建立一个网站,并试图找到一种方式加密用户的电子邮件地址。如果我的数据库被偷了,我的用户的电子邮件不会是纯文本,那就太好了。我认为用户显然需要电子邮件登录,所以如果我用他们的密码加密它,甚至是电子邮件本身,那么我仍然可以构建一个登录功能,这是可行的。
当我需要用户的电子邮件地址时,会出现问题。例如,在密码重置或发送新闻稿的情况下。我可以在数据库中的第二个字段与用户的电子邮件地址,加密的密钥,我知道。
我能加密两个密钥的地方吗?就像一把万能钥匙……还是我太蠢了?
发布于 2019-12-01 18:46:32
发布于 2019-12-01 18:14:51
你真的需要用户的电子邮件地址吗?
如果您将电子邮件地址存储为散列(电子邮件+ salt):salt,则可以简单地验证用户提供的电子邮件地址。如果用户请求重新设置密码,只需验证电子邮件地址是否匹配,并将电子邮件发送给提供电子邮件的用户。
如果您希望基于电子邮件地址(例如用户名为电子邮件)在数据库中进行查找,则此模型显然无法工作。然而,正如康纳·曼科内所指出的那样,所有地址的全局胡椒都能工作,但会在一定程度上降低安全性。
这显然消除了您发送时事通讯的可能性。但这意味着数据库泄露不会泄露电子邮件地址。
发布于 2019-12-02 11:19:14
现有答案的另一种选择:将电子邮件放在单独的机器上&应用程序,并且只将散列存储在主应用程序DB中。
使用散列验证电子邮件。
当您需要发送电子邮件时,您的应用程序将与传递散列+电子邮件消息的其他服务通信,而其他应用程序将发送电子邮件。
很明显,黑客可以侵入第二台机器并访问电子邮件,但是您仍然在添加安全性,因为:
因此,辅助计算机的攻击面可以比应用程序的小得多。
加分:你可以把其他的答案应用到你的第二台机器上,增加更多的安全性(尽管如果你假设你已经被黑了,那就不完美了……)
https://security.stackexchange.com/questions/222103
复制相似问题