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

问题描述 投票:1回答:1

我有一个我在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);

我想比较新密码(最好加密)和previousPasswords表中的最后一个'n'密码。

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

asp.net-mvc-3 asp.net-membership password-encryption change-password
1个回答
0
投票

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

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

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

对于密码策略,请检查第5.1节

© www.soinside.com 2019 - 2024. All rights reserved.