вопрос наилучшей практики проверки ввода mvc - PullRequest
0 голосов
/ 06 апреля 2011

Итак, я просматривал исходный код nerddinner и у меня возникли вопросы по обработке ввода.

Вот код вопроса:

        [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) Какова наилучшая практика для проверки входных данных? Я предполагаю, что это будут Белые списки, применяемые в точке входа, но я не вижу, что здесь последовало.

1 Ответ

1 голос
/ 06 апреля 2011

1) MembershipService.ValidateUser вызывает microsofts поставщик членства ASP.NET по умолчанию и в зависимости от того, находится ли этот пользователь в хранилище, он проверяет имя пользователя и пароль.Вы можете переопределить метод по умолчанию MembershipService.ValidateUser и вызвать свое собственное внутреннее хранилище членства.

2) Я думаю, что он использует параметры запроса для предотвращения внедрения sql.

3) Вы можете проверить параметры запроса, прежде чем отправить их провайдеру членства для проверки.Если вы хотите помыть данные.Лучший способ - использовать белые списки, но вы также можете установить максимальную длину для ввода пользователя, чтобы они не могли отправлять слишком много информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...