所以我正在浏览nerddinner源代码,并对输入处理有一些疑问。mvc输入验证最佳实践问题
这里是有问题的代码:
[HttpPost]
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings",
Justification = "Needs to take same parameter type as Controller.Redirect()")]
public ActionResult LogOn(string userName, string password, bool rememberMe, string returnUrl) {
if (!ValidateLogOn(userName, password)) {
ViewData["rememberMe"] = rememberMe;
return View();
}
.....
}
private bool ValidateLogOn(string userName, string password) {
if (String.IsNullOrEmpty(userName)) {
ModelState.AddModelError("username", "You must specify a username.");
}
if (String.IsNullOrEmpty(password)) {
ModelState.AddModelError("password", "You must specify a password.");
}
if (!MembershipService.ValidateUser(userName, password)) {
ModelState.AddModelError("_FORM", "The username or password provided is incorrect.");
}
return ModelState.IsValid;
}
我的问题是什么,我没有看到任何真正的输入验证上述方法。是的,他们有一些空验证,但真正的输入似乎直接传递给会员服务。这有什么影响?我知道MVC 3似乎具有相当不错的默认XSS保护(即:如果它检测到xss输入,它将引发错误)。怎么样的SQL注入?我想我在问以下问题:
1)MembershipService.ValidateUser实际上做了什么?
2)当时是否有输入验证?还是仅仅依靠查询参数来保护数据库?
3)什么是输入验证的最佳实践?我假设它将在入境口岸申请白名单,但我没有看到在这里跟随。