Последнее, что вы хотите сделать, - это сохранить все неудачные попытки входа в базу данных, это будет работать достаточно хорошо, но при этом DDOS-атакам будет очень тривиально отключить сервер базы данных.
Вы, вероятно, используете какой-либо тип серверного кэша на своем веб-сервере, memcached или аналогичный. Это идеальные системы для отслеживания неудачных попыток по IP-адресу и / или имени пользователя. Если определенное пороговое значение для неудачных попыток входа в систему превышено, вы можете решить деактивировать учетную запись в базе данных, но вы будете сохранять кучу операций чтения и записи в постоянном хранилище для счетчиков неудачных входов, которые вам не нужны. сохраняются.
Если вы пытаетесь остановить людей от грубой аутентификации, система регулирования, подобная предложенной Гамбо, вероятно, будет работать лучше. Это сделает атаки методом "грубой силы" неинтересными для злоумышленника, в то же время сводя к минимуму воздействие для законных пользователей в обычных условиях или даже во время атаки. Я бы посоветовал просто подсчитать количество неудачных попыток по IP в memcached или подобном, и если вы когда-нибудь станете мишенью для чрезвычайно распределенной атаки методом перебора, вы всегда можете выбрать также отслеживать попытки по имени пользователя, предполагая, что злоумышленники на самом деле часто пытаются использовать одно и то же имя пользователя. До тех пор, пока попытка не очень распространена, так как все еще исходит из исчисляемого количества IP-адресов, исходный код by-IP должен достаточно адекватно удерживать злоумышленников.
Ключ к предотвращению проблем с посетителями из стран с ограниченным количеством IP-адресов состоит в том, чтобы не делать ваши пороги слишком строгими; если вы не получите несколько попыток в течение нескольких секунд, вам, вероятно, не о чем беспокоиться. скриптовое перебор. Если вас больше интересуют люди, пытающиеся распутать пароли других пользователей вручную, вы можете установить более широкие границы для последующих неудачных попыток входа в систему по имени пользователя.
Еще одно предложение, которое не отвечает на ваш вопрос, но в некоторой степени связано с этим, заключается в обеспечении определенного уровня безопасности пароля для ваших конечных пользователей. Я бы не стал зацикливаться на требовании пароля в смешанном регистре, по крайней мере x символов, не словаря и т. Д. И т. Д., Потому что вы не хотите много глючить, когда они еще даже не зарегистрировались, но простое запрещение людям использовать свое имя пользователя в качестве пароля должно очень долго защищать ваш сервис и пользователей от самых простых атак - угадайте, почему они называют их грубыми атаками;) - атак.