2012-03-26 2 views
1

В нашем приложении мы хотим заблокировать пользователя после определенного количества неудавшихся логинов. Мы используем пользовательские таблицы для хранения пользователя.Заблокировать пользователя после определенного количества неудачных логинов

На нашей странице входа он содержит три поля, такие как имя пользователя, пароль и поле идентификатора. Поле id не является уникальным.

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

Так какой лучший способ получить неудавшиеся логины и там заблокировать пользователя?

+1

Почему вы хотите заблокировать учетную запись пользователя, а не блокировать IP-адрес злоумышленника? – zerkms

+0

@zerkms: его как требование от клиента заблокировать пользователя, а затем они должны попросить администратора разблокировать учетную запись. –

+1

Чтобы определить, используется ли кто-то, кто пытается войти в систему, является одной из причин использования политики блокировки. Если вы заблокируете ТОЛЬКО для фактического пользователя, тогда в чем смысл использования политики блокировки? – Kai

ответ

1

Я хотел бы использовать колонку FailedAttemptCount в таблице пользователей, и просто увеличивать его каждый раз, когда попытка пользователя недействительна

+0

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

+0

Но это всегда так. Если я знаю чье-то имя для входа, скажем, Active Directory, я могу легко заблокировать свою учетную запись, просто набрав неверные пароли. – mgnoonan

0

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

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

+0

yes thats то, что я делаю сейчас, но в этом случае второй пользователь знает, что имя пользователя может легко заблокировать пользователя, вот и моя проблема .. –

1

Считаете ли вы использование ASP.NET Membership? Это уже обрабатывает ситуации, о которых вы упомянули. Это можно настроить для блокировки учетной записи после нескольких неудачных попыток.

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

+0

, но мы используем пользовательские таблицы для входа в систему. –

+0

Я понимаю. Я просто предлагаю вам использовать провайдер членства .net; это проще и безопаснее. Членство .net уже обрабатывает неудачные входы в систему, забыли пароль, роли, солить + хешировать пароли, мульти-аренда и т. Д. – David

1

Если вы используете ASP.Net поставщика членства можно настроить поставщика, чтобы иметь попыток входа в систему, maxInvalidPasswordAttempts="3" {любая попытка номер} .Для более см Login Attempts

+0

, но мы используем пользовательские таблицы для входа в систему. –

+0

хорошо, вам, возможно, придется написать свою собственную логику кода, которая может быть аналогична провайдеру членства Asp.NET. Однако я не думаю, что это необходимо сделать, потому что есть вне коробки, предоставляемой платформой .NET. – wonde

0

Может быть SessionID полезно, если же SessionID и то же самое имя пользователя Логин три

раз, когда Логин не удается, пользователь с SESSIONID заблокировано ....

+0

, но в этом случае, если пользователь закрывает текущий сеанс, и если попытается войти в систему, он может попытаться войти в систему 3 раза. но этого следует избегать. –

+0

@mahesh Мы можем идентифицировать пользователя, получая номер из базы данных при первом входе в систему и сохраняя номер в cookie. – WangHu

+1

мы можем сгладить неудавшиеся логины по имени пользователя и номеру базы данных – WangHu

1

на неудачной попытке входа, я хотел бы использовать словарь, хранящийся в состоянии приложения, с IP, как key и простое целое число для подсчета очков как value

Затем при каждом неудачном входе в систему, если IP-адрес пользователя существует в словаре, увеличьте его. Если счетчик попыток равен >, а не количеству попыток входа в систему, отмените сеанс.

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

Но это должно быть легко.

Смежные вопросы