忘记我的密码以保护数据库的安全
我创建了一个数据库结构,其中用户获取公钥和私钥以访问信息,公钥被上传到数据库,私钥用用户密码加密,所以我让他可以访问它。要在此结构中实现“忘记我的密码”,必须将电子邮件发送到Unser,Unser提供了使用新密码加密私钥的选项。我考虑将所有私钥存储在其他地方,但这会危及整个安全性,因为我不希望将私钥或密码存储在数据库中的任何位置。因此,我现在遇到的问题是,如果没有原始密码,我无法访问私钥,那么如何才能让用户使用新密码对其进行重新加密。忘记我的密码以保护数据库的安全
您不需要原始密码就可以为用户添加更改密码的选项。 非常危险创建一个方法来恢复用户的原始密码。如果我是你,我会使用一些散列算法,如SHA-256,并将结果存储为用户的密码。
那么,回到这个问题,完成这个密码用户更改的一种方法是在User
表中创建一个UUID。当用户尝试更改密码时,您将其重定向到链接中带有此UUID的页面。该UUID用作允许用户更改其密码的临时密钥。
每个示例。
表:用户
id | name | UUID
1 | John | f39a33c3-e7f5-455a-afad-dcf845eb04a1
当用户想更改密码,你发送一个链接,他的电子邮箱:
http://yoursite.com/recover-password?UUID=f39a33c3-e7f5-455a-afad-dcf845eb04a1
因此,当用户在输入新密码该页面并提交信息,您将获得此UUID并验证它是否真的是为用户生成的UUID。所以,密码更改可能会发生。
实现此目的的最简单方法是使用当前密码解密私钥并使用新密码重新加密,然后更新数据库中的新密码。
不要这样做。密码永远不应该被加密。按照Dherik的建议使用安全散列。如果用户的帐户受到攻击而没有明显的攻击迹象,则不希望列在潜在的嫌疑人名单中。您也不希望一个违规(或流氓管理员)有权访问所有帐户。 – SQLmojoe
哈哈XD我知道蠕变存储的密码是危险的,我会更新一个更具体的问题,一秒钟。 – Luis
uuid函数 – Luis
@luis,这是几乎所有语言都可用的算法。在java中是:'java.util.UUID' – Dherik