Куки - это если мы подбираем вручную, через браузер, да? Или я, программируя скрипт подбора пароля, должен также запрограммировать функциональность для запоминания этих кук и последующей отсылки их на сервер?
Обяснить очень просто - было много неудачных попыток входа. Возможно, кто-то пытался подобрать Ваш пароль.
IP можно банить не только по одиночке, но и по маске. Запускаем, например, whoisinform.ru и баним, баним, баним. Придумываем особый вид бана, который только запрещает логиниться. Это к тому, что "каждый день - разные IP"
Для пользователей можно сделать настройку, что вход возможен только с таких-то адресов. Если у кого-то постоянно блокируется логин - объяснить, что было много неудачных попыток с разных адресов и посоветвовать ему включить эту настройку.
Блокировка по адресу тоже не подарок. Сидят пользователи в каком-нибудь интернет-клубе. Кто-то побаловался и в результате весь клуб не может зайти на сайт. Добавлено: в случае с блокировкой по логину пользователь может разблокировать свой логин самостоятельно, а в случае с блокировкой по адресу все окажутся со связанными руками.
Универсальной защиты нет. Блокировка по адресу - менее надежная, поскольку дает возможность большего (в десятки, сотни, тысячи раз) количества попыток, чем блокировка по логину. Делаем вирус, рассылаем его всем и устраиваем распределенную атаку, когда с огромного количества разных адресов подбираются пароли к разным логинам. После этого система окажется заблокированной для всех при любом подходе - хоть по адресам, хоть по логинам блокируй. Как ты от такого предлагаешь защититься?
Нельзя построить защиту, которая при любой атаке выстояла бы. Мы можем лишь снизить степень разрушения системы.
Не думаю, что для обычных сайтов подбор пароля есть слишком большой проблемой. Если нет вообще никакой защиты - его могут подобрать и украсть логин, поэтому элементарная защита должна быть. Защита может включать в себя в простейшем случае - простое ведение журналов всех неудачных попыток (такое, кстати, часто рекомендуют специалисты по безопасности) в более сложном - автоматическая блокировка, толи по адресу, толи по логину.
В случае с очень важными сайтами имеет смысл делать логин секретным. Например, в банковских системах мой логин нигде не светится и его никто не спрашивает, так же, как и пароль - спрашивают только номер карточки, который написан на самой карточке и не является секретным.
При разработке любой системы защиты всегда стоит выбор: что важнее - защита или удобство пользования. Я выбрал блокировку по логину всего лишь потому, что она немножко надежнее блокировки по адресу и потому, что с точки зрения возможных потерь нет принципиального отличия в блокировке по адресу или блокировке по логину.
А, вообще, для узнавания пароля гораздо выгоднее применять не "грязную силу" (которая не только сомнительна с точки зрения результата - узнать пароль, но и "светится" гораздо раньше, чем злоумышленник получит пароль), а более тонкие методы, например, фишинг или социальный инжиниринг.