PHP和恢复密码过程
Posted
技术标签:
【中文标题】PHP和恢复密码过程【英文标题】:PHP and recovering password process 【发布时间】:2011-09-24 10:36:03 【问题描述】:所以我打算使用phpass
为我在php 中的身份验证系统的密码进行哈希处理。我的问题是,当有人因为忘记密码而要求恢复密码时,最佳做法是什么?你会实施一个问答系统并允许他们在网站上重置它吗?或者您会使用随机密码字符串临时重置他们的密码并通过电子邮件发送给他们吗?要求他们在下次登录时更改它?还是有其他更好的方法?
【问题讨论】:
【参考方案1】:如果用户选择容易猜到的问题,或者攻击者对受害者有深入的了解,则查询/响应可能是不够的。许多知名网站利用原始用户提供的信息:电子邮件地址。向邮箱地址发送密码重置链接,并允许用户点击链接重置密码。
【讨论】:
@George Cummins 好的,我将如何验证允许用户重置密码?在数据库中创建一个唯一的随机生成的密钥/密钥并将该密钥发送给他们?然后当他们点击页面时,它会将电子邮件地址与该键匹配,如果匹配则允许他们重置密码? @John:是的,这是典型的模式。当用户提交新密码时,您还应该要求提供一些识别信息(帐号、上次交易等)。 Fishnet Security 发表了一篇关于可用技术的有趣论文。他们首选的方法结合了几个身份验证步骤:fishnetsecurity.com/Resource_/PageResource/White_Papers/… @George Cummins 当他们开始设置他们的帐户时,我可以要求他们提供一个 4 位数的密码。这可以用于识别信息。还是有点过火了? @John,我个人的看法是,除了密码之外,PIN 对用户来说太难记住了,而且很容易忘记。安全问题(除了电子邮件链接重置方案之外)可能会让您的用户有更好的记忆机会,但也可能会惹恼想要快速完成注册过程的用户。您可以添加任意数量的步骤,但您应该在安全性和便利性之间取得平衡。【参考方案2】:请参阅Implement password recovery best practice 上的Jay's 回答,了解有关如何使密码恢复更安全以及为什么安全问题是一个坏主意的想法。
Bruce Schneier 对此也有想法。
我会推荐 Duncan 的建议。
但是,你不应该做的事情:
发送密码 - 因为毕竟, 正如已经提到的,你 没有。
生成一个新的临时密码 - 这不仅像 发送密码,也会导致 拒绝服务的可能性 攻击。我可以去现场,假装 成为您,请求新密码并 那么(如果你还没有检查你的 电子邮件)您无法登录,不知道 为什么并且必须要求一个新的 密码...
令牌可能是要走的路。 收到通知被遗忘 密码请求,但不接受任何 除非您确认,否则采取行动。你会 也使它成为一次性令牌 相对较短的到期时间限制 风险。
如果有的话,应该使用安全问题来允许用户发起密码重置请求。 IE。您需要提供您的电子邮件和安全问题答案才能发送密码重置请求。
【讨论】:
以上是关于PHP和恢复密码过程的主要内容,如果未能解决你的问题,请参考以下文章