그래서 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 입력을 검색하면 오류가 throw됩니다) 것으로 보인다. SQL 인젝션은 어때? 나는 다음과 같은 질문을하고 있다고 생각한다 :1) MembershipService.ValidateUser는 실제로 무엇을 하는가?
2) 그 시점에서 입력 유효성 검사가 있습니까? 또는 데이터베이스를 보호하기 위해 쿼리 매개 변수에만 의존하고 있습니까?
3) 입력 유효성 검사에 가장 적합한 방법은 무엇입니까? 나는 그것이 입력 지점에서 적용된 화이트리스트가 될 것이라고 추측하고 있지만, 나는 여기에 따라 오는 것을 보지 못한다.