我目前正在对我所有的用户密码进行哈希处理并将它们放入我的数据库中。
现在,我的一些用户希望我获取他们的密码,或者希望我在以他们身份登录时做一些管理工作。
我的问题是我可以取消存储在数据库中的密码并检索它吗?如果是这样怎么办?
蛋糕中是否有允许此功能的功能?
不可以。哈希不能被设计反转。您可以找到冲突,但这不是反转哈希。
如果您需要管理员级别的访问权限,请将其构建到您的应用程序中。但是用户的密码不应该是可恢复的。如果有人可以访问您的数据库并且您的用户密码是可恢复的,那么您作为开发人员就失败了,并且危害了您应用程序的每个用户。
他们忘记密码这一事实意味着您可以给他们任何密码,因此我的建议是简单地生成一个由可发音单词和几个数字组成的新密码并将其发送给用户;无论如何,他们可以在之后更改密码。
这样您就不必在安全性上妥协,因为密码哈希一开始并不意味着要反转。
模拟用户是一项管理功能;如果您拥有适当的角色,您可以成为另一个用户并像他们一样做事。
你不能“取消散列”某些东西,这就是为什么散列是“安全的”(我们不会在这里讨论)。
现在,您的用户为什么要找回他们的密码?因为他们忘记了,无法登录?如果是这种情况,除了尝试取消散列某些内容之外,还有其他方法可以执行“忘记密码,我会为您解决”。最常见的是放置一个“忘记密码”链接,要求输入电子邮件,发送一封电子邮件,其中包含重置密码的链接,用户单击该链接,重置会创建一个随机密码(并对其进行哈希处理)替换旧密码,然后将新的随机通行证发送给用户,用户使用随机通行证并可以在登录应用程序时将其更改为新的通行证。
如果您作为管理员想要“充当”其他人,您可以添加一个功能(只有您作为管理员才能访问)让您“充当”另一个人,而无需知道他们的密码。我认为,这取决于你想做什么,最好的解决方案是什么,应该作为一个完全不同的问题发布。
但是,请仔细考虑,这是一件非常危险的事情。如果有人可以执行此功能怎么办?没有其他解决方案吗?如果你这样做,攻击者和对应用程序中每个帐户的完全访问之间唯一的事情就是你的管理员密码。如果您将密码散列更改为密码加密(可以反转并获得纯文本),那么一些“邪恶”也将更容易解密密码。我知道客户说了算,但向他解释,做他想做的事是非常不安全的。