防止上次'N'密码重用 - MVC 3

时间:2018-03-01 12:26:42

标签: asp.net-mvc-3 asp.net-membership password-encryption change-password

我有一个我在MVC 3中创建的登录表单,其中包含“更改密码”视图。 目前,重用以前的密码没有任何限制。 我知道我需要创建一个自定义密码管理器,因为ASP.net没有任何方法可以解决这个问题。 我创建了一个'previousPassswords'表。

目前,我的'changePassword'控制器如下所示:

 if (ModelState.IsValid)
            {

                // ChangePassword will throw an exception rather
                // than return false in certain failure scenarios.
                bool changePasswordSucceeded;
                try
                {
                    MembershipUser currentUser = Membership.GetUser(User.Identity.Name, true /* userIsOnline */);
                    changePasswordSucceeded = currentUser.ChangePassword(model.OldPassword, model.NewPassword);
                }
                catch (Exception)
                {
                    changePasswordSucceeded = false;
                }

                if (changePasswordSucceeded)
                {
                    return RedirectToAction("ChangePasswordSuccess");
                }
                else
                {
                    ModelState.AddModelError("", "The current password is incorrect or the new password is invalid.");
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);

我想将新密码(最好是加密的)与之前的密码表中的最后一个'n'密码进行比较。

这是推荐的方法还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

您不应该检查以前的密码(比较:https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-63b.pdf)。

首先,它增加了用户更容易使用的机会,因此更加不安全的密码: '我不能再使用 myPassword 作为密码?好吧,让它密码然后'。或者更糟:“我不能使用我的个人密码?好吧,我将使用电子邮件密码'

其次,如果您的用户数据被盗/被黑,效果会更糟:每个用户不会丢失一个密码,而是多个。

对于密码政策,请查看第5.1段