Почему ValidateUser не возвращает больше? - PullRequest
5 голосов
/ 13 февраля 2009

Я пользуюсь стандартным провайдером членства .NET и думал, что посмотрю, сможет ли кто-нибудь пролить свет на это.

Вызов ValidateUser возвращает либо true, либо false. Теперь, поскольку метод принимает имя пользователя и пароль, можно предположить, что возвращаемый результат будет отражать неверное имя пользователя или пароль. Однако, если мы углубимся в это дальше, мы обнаружим, что он также проверяет IsLockedOut и IsApproved.

public override bool ValidateUser (string username, string password)
{
    MembershipUser user = GetUser (username, false);
    /* if the user is locked out, return false immediately */
    if (user.IsLockedOut)
        return false;
    /* if the user is not yet approved, return false */
    if (!user.IsApproved)
        return false;
    ......

В своем приложении я хотел бы использовать IsApproved для своих собственных нужд. Простое переключение моего собственного провайдера не сработает, потому что я все еще ограничен результатом bool. Создание пользователя дает нам всю необходимую информацию, так почему бы не ValidateUser? Я что-то упустил?

1 Ответ

9 голосов
/ 13 февраля 2009

Я ожидаю, что то, что вы видите, является решением безопасности - ограничивая возвращаемую информацию, они не предоставляют информацию злоумышленникам.

Представь, что ты - Кирилл Крэкер, пытающийся взломать сайт.

Сценарий № 1: Вы пытаетесь ввести имя пользователя «Admin» с паролем «Password», и система сообщит вам «нет». Единственная информация, которая у вас есть, это то, что Admin / Password не является допустимой комбинацией.

Сценарий № 2: Вы пытаетесь ввести имя пользователя «Admin» с паролем «Password», и система сообщает, что ни один пользователь с таким именем не известен. Вы можете продолжать пробовать разные имена пользователей, пока не найдете имя, которое известно .

Сценарий № 3: Вы пытаетесь ввести имя пользователя «Администратор» с паролем «Пароль», и система сообщает, что пароль недействителен. Внезапно, вы знаете, что «Администратор» является действительным пользователем. Вы узнали что-то полезное, и все, что вам нужно угадывать, это пароль.

Сценарий # 4: вы пытаетесь ввести имя пользователя «Администратор» с паролем «Пароль», и система сообщит вам, что учетная запись заблокирована. Теперь вы знаете действительное имя пользователя и пароль, и что учетная запись заблокирована. Вы можете вернуться позже и попробовать еще раз.

Системы, которые проливают бобы на то, что является действительным, а что нет, известны как болтливые системы , и они считаются небезопасными по уважительной причине, поскольку их легче взломать.

Надеюсь, это полезно.

...