Asp.net mvc 4 WebSecurity.ChangePassword在什么时候失败;新密码无效";?
这是在MVC 4中构建的默认AccountController中更改密码的代码:Asp.net mvc 4 WebSecurity.ChangePassword在什么时候失败;新密码无效";?,asp.net-mvc-4,security,simplemembership,Asp.net Mvc 4,Security,Simplemembership,这是在MVC 4中构建的默认AccountController中更改密码的代码: // ChangePassword will throw an exception rather //than return false in certain failure scenarios. bool changePasswordSucceeded; try { string userName = User.Identity.Name; changePasswordSucceeded
// ChangePassword will throw an exception rather
//than return false in certain failure scenarios.
bool changePasswordSucceeded;
try
{
string userName = User.Identity.Name;
changePasswordSucceeded = WebSecurity.ChangePassword(userName,
model.OldPassword,
model.NewPassword);
}
catch (Exception)
{
changePasswordSucceeded = false;
}
if (changePasswordSucceeded)
{
return RedirectToAction("Manage", new { Message = ManageMessageId.ChangePasswordSuccess });
}
else
{
ModelState.AddModelError("",
"The current password is incorrect or the new password is invalid.");
}
我的问题是,信息不清楚。如果当前密码不正确,那没关系,但如果新密码无效,我希望向用户提供更好的消息,告诉他们哪里出了问题,并且我希望更好地理解“失败场景”,以便我可以定制消息
文档中详细说明了异常情况,我认为不应在操作中忽略这些异常,并将其报告为无效密码
那么,为什么这里可能出现“新密码无效”的情况呢?如果在应用程序中仅使用SimpleMembershipProvider而不使用OAuth,是否可以删除它
编辑:NB此数据注释也出现在“RegisterModel”类中,因此这里也有密码有效性检查
[StringLength(100,
ErrorMessage = "The {0} must be at least {2} characters long.",
MinimumLength = 6)]
总结
这是一个很长的答案,所以我把它编辑成了几个部分。与这样的用户相比,我不是一个安全专家,甚至他也说不要相信他的安全答案,或者其他任何人的。自己测试并理解它,永远。任何阅读本文的web开发人员都应该阅读、使用在线指导,当然,还有。安全性对于我们中的任何一个人来说都是复杂和太大的,所以请使用能够根据最佳实践进行工作的框架。最重要的是,保留一切
有关这些摘要答案的更多详细信息,请参见下文:
- 我走到你的手机/平板电脑/笔记本电脑旁,坐在酒吧/咖啡厅的桌子上(或家里/办公室的台式电脑上)
- 我想我可能知道你的密码
- 我进入“更改密码”并键入我认为您的密码不正确的内容
- 我故意输入了一个1个字符的新密码
- 已将电子邮件发送到您的地址(对于数据库中的电子邮件)
- 找不到您的电子邮件(显然是伪造的电子邮件地址)
WebSecurity.ChangePassword
:
总之,如果出现以下情况,则返回false
:
UserId
不再存在于数据库中;或changepasswordsucceed=false
)ChangePassword
返回false
即使在攻击者绕过浏览器中的UI(他们将绕过)的情况下,这一切都是正确的,因为操作本身在模型上调用IsValid
客户端消息
这里有一个严肃的免责声明:我不会把我的一生都花在安全上。我遵循“按设计安全”原则(例如,我遵守这些原则),并且相信我对最重要的安全原则有很好的认识。因此,我可能有一些逻辑错误
如果客户端“密码要求”验证不存在-会发生什么?用户必须等待帖子返回以了解发生了什么
如果存在客户端“密码要求”验证,是否会削弱我们的界面?我不这么认为
- 服务器仍然执行要求和当前密码验证
- 服务器不支持远程通信