Проблема заключается в балансе между доступностью пользователя и моделью злоумышленника.
Первое решение
If not password correct for a certain number of time:
block the user
send a reset link to the user
Пользователь: может быть заблокирован, и ему не нравится сбрасывать настройки
Злоумышленник: заблокировал всех пользователей, пытаясь аутентифицировать всех пользователей (особенно если все логины в открытом доступе)
Второе решение
If not password correct:
sleep(amount_of_time)
Вопрос в том, каково значение 'amount_of_time'?
Пользователь: может раздражать ожидание "количества_времени" для каждой ошибки
Злоумышленник: продолжайте попытки, с более низким тестом в секундах
Третье решение
If not password correct:
sleep(amount_of_time)
amount_of_time = amount_of_time * 2
Пользователь: меньше раздражает из-за нескольких ошибок в пароле
Злоумышленник: блокирует подключение пользователя, отправляя множество неправильных паролей
Четвертое решение
If not password correct for a certain number of time:
submit a CAPTCHA
Пользователь: необходимо решить CAPTCHA (не слишком сложно)
Злоумышленник: необходимо разрешить CAPTCHA (должно быть сложно)
Хорошее решение (и используется многими сайтами), но будьте осторожны с нашей CAPTCHA. реализация. В любом случае есть хитрость (см. Следующее решение).
Пятое решение
If not password correct for a certain number of time:
block the IP
(eventually) send a reset link
Пользователь: пользователь может быть заблокирован, поскольку он не может правильно вспомнить свой пароль.
Злоумышленник: пытается использовать тот же пароль с другим пользователем, поскольку блокировка основана на количестве входов в систему пользователем.
Окончательное решение ?
If several login attempts failed whatever is the user by an IP :
print a CAPTCHA for this IP
Пользователь: пользователь не может быть заблокирован по IP-адресу, но должен помнить свой пароль.
Злоумышленник: сложно провести эффективную атаку грубой силы.
Важные примечания
Заблокирована ли форма входа или ссылка для входа в систему? Блокировать форму входа бесполезно.
Устойчивость к грубой силе — это, В первую очередь, проблема сложности пароля, поэтому вам нужна строгая политика паролей (особенно в случае распределенного грубой силы).
Я не упоминаю тот факт, что ваши пароли хэшируются солью, вы уже делаете это правильно? Потому что, если доступ к базе паролей проще, чем брут-форс, злоумышленник выберет это решение (цепочка настолько прочна, насколько сильно ее самое слабое звено).
person
Kartoch
schedule
04.04.2013