我有一个我在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'密码进行比较。
这是推荐的方法还是有更好的方法?
答案 0 :(得分:0)
您不应该检查以前的密码(比较:https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-63b.pdf)。
首先,它增加了用户更容易使用的机会,因此更加不安全的密码: '我不能再使用 myPassword 作为密码?好吧,让它密码然后'。或者更糟:“我不能使用我的个人密码?好吧,我将使用电子邮件密码'
其次,如果您的用户数据被盗/被黑,效果会更糟:每个用户不会丢失一个密码,而是多个。
对于密码政策,请查看第5.1段