在默认的 ASP.NET 核心项目中,为什么"Forgot password"功能要求用户电子邮件两次?



在Visual Studio 2017中,如果创建新的 ASP.NET 核心Web应用程序(Razor Pages),配置为使用个人用户帐户和在应用程序中存储用户帐户,则"忘记密码"流如下所示。

  1. 用户转到登录页面
  2. 用户点击"忘记密码?
  3. 用户输入电子邮件地址,然后单击"提交">
  4. 将向用户发送一封电子邮件,其中包含用于重置密码的链接。此链接包含用户 ID (Guid) 和用于重置的代码。
  5. 用户单击链接并转到"重置密码"页面。
  6. 用户输入电子邮件、密码和确认密码,然后单击重置。

然后重置密码。

我的问题是,考虑到用户 ID 已经在 URL 中,是否有一些特定原因要求用户在步骤 6 中输入他的电子邮件。重置密码页面可以通过 id 查找用户,而不是询问电子邮件地址。

我认为这是一项安全功能,以防有人拦截链接。但是拦截链接可能意味着拦截包含链接的电子邮件,然后无论如何都会知道用户的电子邮件。所以我觉得我错过了什么。

对我来说听起来像是一个安全问题。

即使你可以查找用户ID,向他们展示他们的电子邮件,这将是一个更好的用户体验;让用户再次输入他/她的电子邮件和重置代码会更安全一些。 这样,密码重置仍包含您知道的内容,以及您必须在密码重置过程中对用户进行身份验证的内容。 你知道的是电子邮件地址,你拥有的东西是重置代码(可能还有用户ID)。

如果不需要电子邮件,并且攻击者以某种方式掌握了重置密码信息,但不知道用户的电子邮件地址,则攻击将能够使用 guid 和重置代码来重置密码。

如果需要电子邮件并且攻击者不知道电子邮件地址,则攻击者将无法仅使用重置信息(用户 ID/代码)重置密码。

密码重置并不经常使用,也不一定是您网站中最用户友好的部分。 最好更安全。

相关内容

最新更新