2010-03-01 203 views
8

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

+0

最近刚刚就这个话题进行了一场巨大的讨论:http://stackoverflow.com/questions/2283937/how-should-i-ethically-approach-user-password-storage-for-later-plaintext-retriev – 2010-03-01 23:36:41

+0

如果您的系统有能力查找用户的密码并通过电子邮件发送给他,那么您做了一些非常错误的事情。你永远不应该能够查找用户的密码。您应该只能散列传入的密码并进行比较或更改,并将新密码发送出去。 – Scott 2011-07-08 22:09:49

回答

14

不能电子邮件将密码发给用户,因为你不知道它。你已经通过applying something like PBKDF2 or bcrypt“散列”了它来存储,对吧?

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

对于许多应用程序来说,足够安全的方法是将链接发送给帐户所有者,包含一个随机生成的大号。此令牌只应在有限的时间内有效。如果所有者希望重置密码,他们点击该链接,并将其认证为帐户所有者。账户拥有者可以指定一个新的密码。

0

我想你会以编程的方式做到这一点?或者这是服务器故障的问题?

其中一种方法是发送链接到用户的电子邮件帐户。他/她点击该链接,并重定向到您的安全Web窗体,他们重置密码。

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

5

你不应该通过电子邮件发送密码。这里是我用过的一步一步的过程:

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

直到设置了新密码,旧密码才会保持活动状态。不要忘记哈希和盐的密码!