忘记密码过程的最佳做法是什么?

时间:2012-12-13 00:05:38

标签: security passwords forgot-password

我目前正在开发一个允许用户使用密码登录的c#Web应用程序。我需要包含的功能是忘记密码功能。

忘记密码的推荐流程是什么?

我在考虑这个:

  • 用户点击忘记密码,输入电子邮件地址
  • 已发送电子邮件
  • 点击电子邮件中的链接(链接仅在一段时间内有效)
  • 带到网站并要求输入新密码(他们是否也应该回答安全问题?)
  • 密码已更改,电子邮件已发送给此类用户
  • 用户现在可以使用新密码登录

2 个答案:

答案 0 :(得分:3)

您的想法看起来很稳固,但我会添加一些其他注意事项:

  • 确保您在使用的电子邮件中生成的令牌使用专为随机化而设计的.Net Framework加密类,而不是看似随机但不是为此目的而设计的。
  • 发送重置电子邮件时不对该帐户采取任何操作(否则,如果他们知道他们的电子邮件,人们就可以锁定其他人的帐户)
  • 添加速率限制器,了解可以为给定电子邮件生成每小时的重置次数。否则,某人可以通过以下方式管理用户:(a)使用x个不良密码来锁定帐户,然后(b)为他们生成重置电子邮件的速度超过电子邮件系统可以提供的速度。
  • 在可能的情况下,请遵循OpenID等其他系统。当你自己卷起来时,很容易出错。

答案 1 :(得分:0)

我们有两种方法可以检索忘记的密码: 1.通过注册的电子邮件ID 2.通过注册手机号码

已注册的电子邮件ID:

一个。要求用户提供已注册的电子邮件ID

湾系统会检查提供的电子邮件ID是否可在数据库中使用

℃。如果数据库中有电子邮件ID,则系统会发送电子邮件以重置密码,但如果数据库中没有电子邮件ID,则系统会显示警告消息。

d。用户必须在重置忘记密码时提供强密码。

即密码重置成功,并且相对于电子邮件ID也在DB中更改。

注册手机号码

此过程与电子邮件几乎相同,但在这种情况下,OTP将通过注册的手机号码发送。 我们需要为此部署第3部分SDK,或者我们可以在IOS中使用imessage。