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

Secure ways to reset password or to give old password

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


您不能将密码通过电子邮件发送给用户,因为您不知道。你已经通过对它应用诸如pbkdf2或bcrypt之类的东西来"散列"它了,对吗?

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

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


你不应该通过电子邮件发送密码。下面是我使用的一个逐步过程:

  • 为用户提供重置密码选项。
  • 此选项为用户保存唯一的令牌。令牌最终到期(小时、天或天)。
  • 链接通过电子邮件发送给用户,其中包括令牌。
  • 用户单击电子邮件链接。
  • 如果令牌存在且未过期,则链接将加载新的密码表单。如果没有,不要加载新的密码表单。
  • 一旦用户设置了新密码,删除令牌并向用户发送确认电子邮件。
  • 在设置新密码之前,旧密码应保持活动状态。别忘了散列和盐渍密码!


    我想你要用程序来做?还是服务器故障的问题?

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

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