[英]Check Password change to ensure that new password doesn't equal last password used
我只是想知道如何检查(当用户在密码过期后更改密码时)我如何使用(在WebMatrix中)if分支以确保新密码不等于以前的密码。
我不认为我想要检查除了上次使用的密码之外的任何密码历史记录,所以只要我可以检查以前的密码,我认为没问题。
我当然可以查询数据库并检查,但由于密码没有以纯文本形式存储,我知道这不起作用,但我还在这里检查了WebSecurity方法:
http://msdn.microsoft.com/en-us/library/webmatrix.webdata.websecurity(v=vs.111).aspx
并没有找到任何东西。
完成这项工作的最佳方法是什么?
由于密码未存储在数据库中,因此除非您在用户首次注册时记录密码,并且随后更改密码,否则无法执行此操作。
具有讽刺意味的是,通过存储原始密码(即使在加密状态下),实际上会降低应用程序的安全性。
对于任何感兴趣的人,我确实找到了一个很好的解决方案来解决这个问题,这可以很好地完成工作。
但请记住,这只会检查他们拥有/拥有的最后一个密码。
这是我实施的:
首先,当然,在登录页面中,在其他代码和实际登录之后,我有明显的(检查他们的密码是否超过6个月并且需要更改):
if(WebSecurity.GetPasswordChangedDate(username).AddMonths(6) < DateTime.UtcNow)
{
WebSecurity.Logout();
Session["gActionMessage"] = "Your password has expired. Please change your password by visiting \"Login\" then \"Change Password\"";
Session["gActionMessageDisplayed"] = "not";
Response.Redirect("~/");
}
然后,我在“更改密码”页面(实际上是密码重置令牌的电子邮件验证后的重定向页面)中提出了这个,但您明白了这一点:
if(WebSecurity.Login(email, newPassword, false) && WebSecurity.UserExists(email) && WebSecurity.GetPasswordChangedDate(email).AddMonths(6) < DateTime.UtcNow)
{
WebSecurity.Logout();
errorMessage = "You cannot repeat your last expired password.";
}
if分支在这里进行三项检查:
首先,它根据他们输入的新密码有效地检查并记录它们。
其次,它检查用户是否存在(不确定我是否需要这个,但无论如何)。
最后,检查以确保他们的密码更改日期超过6个月(因为相同的页面用于“忘记密码”的东西,所以这只是确保在以这种方式犯错之前满足正确的情况)。
因此,简而言之,如果他们的新密码仍足以记录它们(当然它实际上在更改之前),那么它就是重复,然后将它们记录下来并向它们抛出错误消息而不是更改密码。 如果不足以将其登录,那么它不能是重复的密码,并且(只要它满足任何其他要求)密码随后会被更改。
希望这有助于将来在密码更改时可能需要使用WebMatrix的非重复密码的任何人!
引用System.Web.Helpers程序集,
创建一个名为“UserPasswordHistory”的自定义表,其中包含“密码”列中存储的散列密码,并在“PasswordVersion”列中添加版本号,每次注册用户时都会插入一行,或者为给定的用户更新密码用户,以下代码有效。
var userProfile = db.UserProfiles.First(x => x.UserId == userId);
var passwords = (userProfile.UserPasswordHistory
.OrderByDescending(x => x.PasswordVersion)
.Take(_configuration.PasswordCountBeforeReuseAllowed))
.Select(x => x.Password);
return passwords.Any(previousPassword => Crypto.VerifyHashedPassword(previousPassword, password));
要回答具体要求的问题,请将_configuration.PasswordCountBeforeReuseAllowed设置为1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.