在默认的 ASP.NET Core 项目中,为啥“忘记密码”功能会要​​求用户输入两次电子邮件?

Posted

技术标签:

【中文标题】在默认的 ASP.NET Core 项目中,为啥“忘记密码”功能会要​​求用户输入两次电子邮件?【英文标题】:In a default ASP.NET Core project, why does the "Forgot password" functionality ask for user email twice?在默认的 ASP.NET Core 项目中,为什么“忘记密码”功能会要​​求用户输入两次电子邮件? 【发布时间】:2018-09-27 17:00:01 【问题描述】:

在 Visual Studio 2017 中,如果您创建一个新的 ASP.NET Core Web 应用程序(Razor 页面),该应用程序配置为使用个人用户帐户将用户帐户存储在应用程序中 ,“忘记密码”流程如下。

    用户进入登录页面 用户点击“忘记密码?” 用户输入邮箱地址并点击“提交” 向用户发送一封电子邮件,其中包含重置密码的链接。此链接包含用户 ID (Guid) 和用于重置的代码。 用户点击链接,进入“重设密码”页面。 用户输入电子邮件、密码和确认密码,然后单击重置。

然后重置密码。

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

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

【问题讨论】:

这是模板创建者的设计决定。您可以通过查找电子邮件轻松地自己创建所需的功能。我个人认为,包括电子邮件或 ID 会泄露信息。然而,这只是我的看法。 Overview of ASP.NET Core Security 【参考方案1】:

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

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

如果电子邮件不是必需的,并且攻击者以某种方式获取了重置密码信息但不知道用户的电子邮件地址,则攻击将能够使用 guid & reset 代码重置密码。

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

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

【讨论】:

以上是关于在默认的 ASP.NET Core 项目中,为啥“忘记密码”功能会要​​求用户输入两次电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

asp.net core 上传文件服务器拒绝是为啥?

在 asp.net core 2 项目中使用路由服务角度

Visual Studio 2019 中默认的 ASP.NET Core + React 模板不起作用

为啥要在 ASP.Net Core 中获取多个 IMemoryCache 实例?

Asp.Net Core 中的静态文件

为啥我们不再需要在更高版本的 ASP.NET Core 中手动验证模型?