我将在身份验证中实现密码恢复。我已经有一段时间没有把这些放在一起了,我想知道是否有什么我应该知道的。
我现在的想法是:
看上去还行吗?在不再建议采用这种方法的这些年里,有什么变化吗?
更新
我选择添加的内容:
发布于 2016-02-24 11:45:32
看上去还行吗?
是的,假设电子邮件是您网站认证的主要形式。
在不再建议采用这种方法的这些年里,有什么变化吗?
就我所知没有。
以下是一些你需要考虑的要点。
什么样的反馈
当电子邮件不存在时,你会说什么和做什么?
如果您的系统使用用户名,最好是询问用户名,而不是电子邮件地址。您将恢复电子邮件发送到与帐户相关的电子邮件地址,而不向用户透露。
令牌实际上是用户帐户的一次性密码。
bin2hex(openssl_random_pseudo_bytes(16));users表中使用(可空)字段而不是单独的表时,更容易强制执行此规则。发布于 2016-02-23 23:51:22
我肯定会四处看看,找出最新和最伟大的加密算法。有很多关于哪一种算法最有效的争论,但总的来说,我发现,在最先进的算法中,两者之间的优势是可以忽略不计的。尽管如此,我肯定会考虑MD5的替代方案,如SHA256、SHA512、RipeMD或WHIRLPOOL。做你的研究并重申你的加密方法还没有被破坏,这总是一个好主意。
而且,我在你的问题中没有看到包括SALTing在内的任何东西。这肯定是您可以考虑实现的,以便为可能实现密码的用户提供额外的安全性,这些密码很容易被黑客使用字典攻击或哈希表破解。
最后一件事(我假设你已经考虑过这一点);我肯定会确保他们输入到你的忘记密码系统中的恢复邮件实际上与你为该用户文件中的电子邮件相匹配.为了安全起见,我也可能包括一个安全问题。
发布于 2016-02-23 10:19:13
我不知道这是否是一个一般性的方法,或者这是否只是我个人的方式/想法,这样的问题,但我会做以下几点。
以客户端的IP为例,用您喜欢的任何算法加密它,但是结果在链接中作为标记,并在其中添加时间戳。
然后,该链接仅对客户端的IP和给定时间有效。
现在,即使是处于中间攻击中的人也无法劫持重置标记。
您也可以请求用户的MAC地址,但在我看来,这基本上是过头了。
这是我个人实现保存现代重置令牌的方法。
https://softwareengineering.stackexchange.com/questions/310824
复制相似问题