Обеспечение максимального количества попыток входа в ASP.NET MVC 3

#asp.net-mvc #asp.net-mvc-3 #security

#asp.net-mvc #asp.net-mvc-3 #Безопасность

Вопрос:

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

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

Какие методы / опции у меня есть для этого? Я, очевидно, не могу использовать скрытое поле, и я не могу использовать сеанс, потому что его нет. Каков протокол или наилучший практический метод для этого.

Я просматриваю 10 попыток, прежде чем я применю сброс пароля или временную деактивацию учетной записи.

ПРИМЕЧАНИЕ — я смотрю, какие методы у меня есть для хранения суммы входа, как я различаю попытки входа и т. Д

Комментарии:

1. Я смотрю, какие методы у меня есть для хранения суммы входа — сохраните ее в поле в записи учетной записи пользователя в базе данных на сервере. как я различаю попытки входа в систему — увеличьте вышеупомянутое поле, заблокируйте учетную запись, если количество становится слишком высоким. Если вы просто пытаетесь предотвратить автоматические атаки, используйте captcha.

2. Нет, вы ничего не упускаете, это основной вопрос. Я знаю, как увеличить размер, но на самом деле я не рассматривал его как поле в учетной записи пользователя. Есть ли у этого какие-либо недостатки?

Ответ №1:

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

Если один и тот же IP-адрес пользователя имеет 10 недопустимых логинов, то ни один логин, который они вводят, не будет работать, даже если они изменят комбинацию имени пользователя и пароля.

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

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

Комментарии:

1. С одного и того же IP-адреса может быть несколько пользователей, поэтому я не уверен, что это будет лучшая стратегия.

Ответ №2:

Я думаю, что общий шаблон заключается в том, что неудачные попытки входа в систему отслеживаются на сервере, а не на клиенте, и что, когда сервер зарегистрировал X количество сбоев для конкретной учетной записи, эта учетная запись блокируется. Затем пользователю необходимо сбросить свою учетную запись с помощью ранее проверенного механизма контактов (адрес электронной почты, номер телефона, вопрос-вызов и т. Д.).

Комментарии:

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

2. Это будет зависеть от вашей реализации. Каким бы образом вы ни представляли свою коллекцию пользователей (базу данных, карту и т. Д.), Вы захотите увеличить счетчик неудачного входа, и когда он достигнет X, вы установите флаг в своей записи пользователя. Вы можете проверить forums.asp.net/t/918243.aspx для краткого обсуждения, но я бы не стал использовать для этого состояние просмотра. Вас интересует что-то подобное? asp.net/security/tutorials /…