Web 应用程序更改电子邮件算法

Web application change email algorithm

我正在开发具有用户管理功能的 ASP.NET 核心 Web 应用程序。我的问题是关于电子邮件地址更改算法。我以前看到的几乎每个网络应用程序都有以下流程:

  1. 用户授权
  2. 用户请求更改电子邮件地址
  3. 用户在新邮箱上收到了一封确认邮件 link
  4. 用户点击 link 并且电子邮件地址更新

但我觉得,这个算法可能有点不安全,这就是我想在这里讨论的。

这个流程怎么样:

  1. 用户授权
  2. 用户请求更改电子邮件地址
  3. 用户在旧邮箱上收到了一封确认邮件 link
  4. 用户在新邮箱上收到了第二次确认的消息link
  5. 用户点击 link 并且电子邮件地址更新

在算法中间加上这个额外的步骤,从安全的角度来看可能会好很多,但它会不会太复杂了?您认为我应该实施哪种算法?如果你站在我的立场上,你更喜欢什么?

第二个选项可能听起来不错,而且实施起来也不是很头疼。但由于某些原因,我会坚持使用第一种方法:

常见的工作流程模式。

由于后端可以由多种语言、不同的开发人员编写,因此当我们需要某种迁移甚至由新开发人员维护时,通用模式会使事情变得更加标准。如果项目不需要超安全的身份验证流程,第一种方法的简单性就足够了。

来自用户方便的看法

试想一下,在更改电子邮件地址时,用户可能想更改电子邮件地址的情况是什么?我很久以前使用雅虎邮箱注册我的 facebook 帐户,该帐户不再有效,我需要切换到 gmail 帐户。将电子邮件发回旧邮件有什么意义?很麻烦...而且这种情况下我只能求助于工作人员。

我完全同意第二种安全角度的做法。但这并不适用于大多数情况,只有在项目有一些要求时才实施。即使在那种情况下,我也建议不要那样做,建立一些类似子管理员帐户角色的东西,并向负责的人授予权限。如Google 企业邮箱组织一些名为admin 的帐户,如果用户帐户发生任何问题。只要有这种安全级别的要求,它就不会服务于海量用户。

所有流量的内涵

用户首先获得授权,对吧,这意味着我们确定了用户是什么,以及她有能力做什么。想象一下,当我们隐藏酒店房间然后由于某种原因要求更改为另一个房间时。证明我预订了自己的房间有什么意义,因为我们都知道这是事实?有点奇怪……对吧?

总而言之,我认为我们不应该搞乱已经成为广泛认可的普遍模式的东西,除非我们有一些特殊要求并且项目有一些独特的东西需要满足,并且我们认为自己是合理的开发人员。

这种方法的主要问题是:如果用户无法再访问其原始电子邮件帐户会怎样?也许这是他们不再拥有的 work/school/uni 帐户,或者他们可能只是忘记了密码或以其他方式无法访问它。

使用您的第二种方法,他们将无法更新到新帐户,因为他们永远不会收到第一次确认 link。

以下方法如何:

  1. 用户请求更改电子邮件。
  2. 要求用户使用当前密码重新进行身份验证(就像他们更改密码时一样)。
  3. 向他们的新电子邮件发送确认 link。
  4. 向他们的旧电子邮件发送通知,其中包含更改的详细信息,以及如果他们没有发起更改该怎么办的说明。
  5. 用户点击 link 更新 联系您的支持人员说他们的帐户已被盗用。

通过这种方式,您仍会向他们发出警告,提醒他们有人试图更改他们的电子邮件(并且可能是一种阻止它的方法),但是无法访问其旧帐户的用户仍然可以更新他们的电子邮件。