Asp.net mvc 4 密码恢复流程-是否向任何电子邮件发送密码恢复?

Asp.net mvc 4 密码恢复流程-是否向任何电子邮件发送密码恢复?,asp.net-mvc-4,password-recovery,forgot-password,Asp.net Mvc 4,Password Recovery,Forgot Password,我正在构建一个新的MVC应用程序。 考虑到“忘记密码”流: 1) 您可以输入电子邮件。 2) 您可以按“发送恢复密码”。 3) 一封电子邮件在收件箱中等待,按下其中的链接将带您进入“新密码”屏幕 在第1阶段,您提供的电子邮件没有限制。(它甚至可能不存在) 此流程是否存在任何重大安全缺陷?您应该在“新密码”部分使用https,以避免有人试图拦截新密码 确保生成的链接不会对电子邮件进行编码。或者,如果黑客发现了该方案,那么他们可以轻松地使用该方案生成链接并为其他用户重置密码。我见过一些人在查询字符串

我正在构建一个新的MVC应用程序。 考虑到“忘记密码”流:

1) 您可以输入电子邮件。
2) 您可以按“发送恢复密码”。
3) 一封电子邮件在收件箱中等待,按下其中的链接将带您进入“新密码”屏幕

在第1阶段,您提供的电子邮件没有限制。(它甚至可能不存在)


此流程是否存在任何重大安全缺陷?

您应该在“新密码”部分使用https,以避免有人试图拦截新密码

确保生成的链接不会对电子邮件进行编码。或者,如果黑客发现了该方案,那么他们可以轻松地使用该方案生成链接并为其他用户重置密码。我见过一些人在查询字符串中传递电子邮件或用户名,这很糟糕。确保在POST请求中完成其余的工作

确保链接在某个时间窗口内过期也很好。此外,确保系统接受的密码类型(最少字符数、字母数字、特殊字符等)有良好的安全限制

确保您正在记录启动重置请求的IP地址和重置密码的IP地址

最后,确保新的密码表单中没有任何XSS(跨站点脚本)错误,您还可以通过在表单中使用防伪令牌来增加更多保护,以防止XSRF(跨站点请求伪造)。有ASP.NET MVC的AntiForgeryToken()帮助程序方法

电子邮件的无限制有点奇怪——它可以用来为他人生成垃圾邮件。您说过它将在下一阶段得到解决,所以如果您的应用程序是低调的,并且在小型企业内部网或小型商业社区等更可靠的环境中使用,那么它可能还可以


即使在那里,如果用户在他们的电子邮件中有输入错误,并且在系统向其他人发送密码重置电子邮件时等待密码重置电子邮件到达,这也可能成为一个大问题。现在,如果这个“其他人”重置了你用户的密码,你就有麻烦了。因此,您可能还想重新确认该页面上的电子邮件,但如果收到电子邮件的用户的意图是恶意的,也可以猜测。考虑到这一点,最好添加检查,以查看用户是否存在于第一阶段本身,从而确保完全安全

,当用户在忘记密码屏幕中输入电子邮件(也是帐户的密钥/id)时,他会收到一条消息“电子邮件已发送到您输入的电子邮件:”。当然,可能会发生帐户被锁定或不存在的情况。因此,您可以发出另一条消息:“帐户已锁定或不存在”。但这有点冒险,因为黑客可以“收获”帐户。

在与相关人员讨论这个问题时,我想我会继续发表文章,介绍我们如何使用类似的流程处理密码重置,并指出我们在哪里尝试防止恶意意图。以下是我们的流程:

  • 在登录表单上,有一个“忘记密码”链接

  • 忘记密码屏幕位于一个简单的文本框中,您可以在其中输入您的电子邮件地址。在我们的实现中,电子邮件地址是用户名,但只要每个用户都有一个有效的电子邮件地址附加到他们的帐户,这就不重要了

  • 用户输入电子邮件地址并按“提交”

    • 如果电子邮件地址与有效帐户关联,我们将生成一个GUID,将其存储在密码重置请求表中,并与请求用户帐户关联,并将过期时间设置为30分钟

    • 如果该电子邮件地址不存在,我们将无所作为。不向任何人发送电子邮件

  • 无论电子邮件地址是否正确,我们都会显示“谢谢,如果您输入的电子邮件地址正确,您将很快收到一封电子邮件,其中包含如何重置密码的说明”。这很重要,因为您不希望使用此表单的坏用户尝试发现用户名

  • 用户收到电子邮件并单击链接。如果GUID/链接仍然有效,这将使他们进入重置密码屏幕(使用新密码/确认新密码文本框)。如果不是,则如果密钥过期或不存在,我们将显示“此重置密钥不再有效”

  • 重置后,用户被重定向到登录屏幕以登录到应用程序


  • 希望这有帮助。正如其他人所说,使用一种好的方法来生成重置密码链接,不要在链接中使用任何用户标识信息(有人可能会猜到它,找出你的算法,等等)

    如果用户帐户不存在该电子邮件地址,会发生什么?正如我所说,没有限制。可能是任何电子邮件这就是为什么有人登录?否则,您将向提供的电子邮件地址发送哪个帐户的密码。如果他们登录,为什么需要“恢复”密码,在我看来,将密码发送到帐户电子邮件以外的任何帐户都是一个巨大的安全风险。如果攻击者发现漏洞,他们可以将每个人的密码发送到自己的电子邮件地址,如果您只发送到帐户地址,则攻击者也必须有权访问该电子邮件帐户。@sa_ddam213-这听起来像是一个自定义链接,如果且仅当您输入正确的电子邮件地址时,您才能获得该链接。希望如果执行正确,电子邮件输入表单不会告诉您是否输入了错误的电子邮件。@Tommy,
    您提供的电子邮件没有任何限制。(它甚至可能不存在)。
    我读到,当我输入任意电子邮件地址并将密码发送到该电子邮件时,我仍然好奇此电子邮件如何链接到拥有密码的帐户,问题中没有太多细节,因此我假设我的大部分评论:),因此我猜用户已经登录,这是m