CSharp - 检查密码更改以确保新密码不等于上次使用的密码

  显示原文与译文双语对照的内容
0 0

我只是想知道如何检查( 当用户在密码过期后更改密码) 如何使用分支确保新密码不等于前面的密码。

我想我不想检查更多的密码历史,只是最后一个密码,只要我能检查上一个密码。

我当然可以以查询数据库并检查,但是密码不能以纯文本方式存储,但我也检查了WebSecurity方法:

http://msdn.microsoft.com/en-us/library/webmatrix.webdata.websecurity(v=vs.111).aspx

没有发现任何。

什么是最好的解决方法?

时间:原作者:5个回答

0 0

由于密码不存储在数据库中,除非在用户第一次注册时记录密码。

讽刺的是,通过存储原始密码( 即使处于加密状态),你实际上降低了应用程序的安全性。

原作者:
0 0

对于任何感兴趣的人,我都找到了一个很好的解决方法,这样就可以以完成。

请记住,这只能用来检查他们拥有的最后一个密码。

这就是我实现的内容:

首先,当然,在登录页面中,其他代码和实际登录后,我都有明显的( 检查他们的密码是否超过 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.";
}

如果这里的分支执行三个检查:

首先,如果可以能的话,它会有效地检查并记录它们在新密码中输入的内容。

其次,它检查用户是否存在( 我不确定我是否需要这个但是不管) 。

最后,检查他们的密码更改日期是否超过 6个月旧( 因为相同的页面被用于"忘记密码"这样就可以确保在erring之前满足正确的条件) 。

简而言之,如果他们的新密码仍然足以记录在( 当然在它被改变之前) 中,那么它是重复的,然后将错误消息发出。 如果不够登录它们,那么它不能是重复的密码,并且( 只要它满足任何其他要求)的密码会被更改。

希望这可以以帮助任何人,谁可以能需要一个非重复密码使用,密码更改在未来。

原作者:
...