重置密码或提供旧密码的安全方法

Posted

技术标签:

【中文标题】重置密码或提供旧密码的安全方法【英文标题】:Secure ways to reset password or to give old password 【发布时间】:2011-01-22 12:35:14 【问题描述】:

处理忘记密码/密码重置最安全的方法是什么?我应该通过电子邮件将密码发送给用户吗?如果是这样,你会强迫他们重置它吗?还是让他们立即重置(不发送电子邮件)并要求其他信息来验证是他们?还是有更好的方法?

【问题讨论】:

最近有一个关于这个话题的巨大讨论:***.com/questions/2283937/… 如果您的系统能够查找用户的密码并将其通过电子邮件发送给他,那么您做错了什么。您应该永远无法查找用户的密码。您应该只能对传入的密码进行哈希处理并进行比较,或者更改它并将新密码发送出去。 【参考方案1】:

您不能通过电子邮件将密码发送给用户,因为您不知道它。您已经通过applying something like PBKDF2 or bcrypt 将其“散列”到它以进行存储,对吧?

如果您在未与帐户所有者确认的情况下重置密码,则攻击者可以通过使用受害者的电子邮件地址请求重置来拒绝所有者访问他的帐户,至少在他检查他的电子邮件之前。

对许多应用程序来说足够安全的方法是通过电子邮件将链接发送给帐户所有者,其中包含一个随机生成的大数字。此令牌应仅在有限时间内有效。如果所有者希望重置他们的密码,他们单击链接,这将验证他们为帐户所有者。然后帐户所有者可以指定一个新密码。

【讨论】:

【参考方案2】:

您不应通过电子邮件发送密码。这是我使用的分步过程:

    为用户提供重置密码选项。 此选项为用户保存唯一令牌。令牌最终会过期(几小时、几天或几天)。 包含令牌的链接通过电子邮件发送给用户。 用户点击电子邮件链接。 如果令牌存在且未过期,链接会加载新的密码表单。 如果不是,请不要加载新密码表单。 用户设置新密码后,删除令牌并向用户发送确认电子邮件。

在设置新密码之前,旧密码应保持有效。不要忘记对密码进行散列和加盐!

【讨论】:

【参考方案3】:

我想你会以编程方式进行吗?还是服务器故障的问题?

其中一种方法是将链接发送到用户的电子邮件帐户。他/她点击该链接并被重定向到您重置密码的安全网络表单。

不要将密码通过电子邮件发送给用户

【讨论】:

以上是关于重置密码或提供旧密码的安全方法的主要内容,如果未能解决你的问题,请参考以下文章

.Net Membership Provider--当旧密码和 Q/A 未知时重置(或更改)密码

允许用户重置密码的最安全方法是啥

weblogic密码重置

电脑忘记密码?

建立激活/密码重置链接的最佳方式

WEB安全新玩法 [4] 防护邮箱密码重置漏洞