【问题标题】:ASP.NET Identity rollback unverified email changeASP.NET 身份回滚未经验证的电子邮件更改
【发布时间】:2017-06-08 15:19:57
【问题描述】:

目前这是一个没有代码的一般问题,因为我正在寻找我的问题的最佳实践示例:

  1. 用户发出电子邮件更改请求。 (完成)
  2. 会向新地址发送一个链接以确认新电子邮件。 (完成)
  3. 用户点击确认链接,数据库更新完成。 (完成)

还需要发生的是,在发送更改确认链接时,还应向原始电子邮件地址发送一封电子邮件,用户可以在该地址中单击链接以撤销该过程,无论出于何种原因。我还认为,即使新的电子邮件地址被接受,如果原始链接拒绝它恢复的更改,并且 2)如果原始电子邮件恢复并且新的电子邮件链接得到确认,那么该请求将被拒绝。

任何有关此事的指导或代码将不胜感激。

【问题讨论】:

  • 这似乎倒退了。电子邮件更改请求应首先发送到当前电子邮件,如果获得批准,则将验证电子邮件发送到新电子邮件。如果获得批准,那么电子邮件将被更改。
  • 但是,电子邮件更改无论如何都是有问题的,因为如果电子邮件已被攻击者入侵怎么办,您现在授予攻击者撤销电子邮件更改的权利,他们肯定会这样做。无论哪种方式,在进行此类更改时使用 2 因素身份验证都是有问题的。

标签: asp.net asp.net-identity-2


【解决方案1】:

似乎数据库用户记录中的一个简单位字段就足够了,或者关联的数据库记录也可以工作。当两封电子邮件都发送时,为该用户标记该字段,我们称其为“ChangeEmailSent”为 1。单击任一电子邮件时,该字段应更新为 0。只有当该字段为 1 时才会发生电子邮件的实际更改.

如果你喜欢一些伪代码

private void CancelEmailChange(email)
{
    var user = Database.GetUser(email);
    user.ChangeEmailSent = false;
    Database.Save();
}

private void ProcessEmailChange(email)
{
    var user = Database.GetUser(email);
if (user.ChangeEmailSent)
{
    user.email = getNewEmailAddress();  //whatever logic for a new email
    user.ChangeEmailSent = false;
    Database.Save();
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-08
    • 2016-11-12
    • 2020-11-22
    • 2018-02-10
    • 1970-01-01
    • 2023-03-18
    • 2012-08-10
    • 1970-01-01
    相关资源
    最近更新 更多