Кажется, что есть по крайней мере три атаки, о которых вы можете беспокоиться:
- Целевая атака на конкретного пользователя.Вы хотите сделать вход в систему более сложным для атакующего, но не намного сложнее.CAPTCHA достаточно (но не заставляйте пользователя снова вводить пароль, если он не отображался на странице входа в систему).
- Масштабная атака на многих пользователей.Блокировка отдельных пользователей немного бессмысленна, так как злоумышленник может просто попробовать (скажем) 3 пароля, а затем перейти к другой учетной записи.CAPTCHA на IP может быть достаточным, но вы также можете ограничить скорость на IP (или X-Forwarded-For для списка прокси-серверов в белом списке).Это зависит от размера ботнета вашего злоумышленника;достаточно большой ботнет может распределять атаки по нескольким ботам / сайтам, так что каждый сайт получает низкую оценку с каждого IP-адреса.
- Автономная атака на базу паролей.В этом случае вам нужно по крайней мере около 50 бит энтропии даже при хорошем хеше (NTLM использует один вызов MD4, который не хороший хеш), который вы не можете получить в относительно нормальном8-значный пароль (8 log 2 (94) - только 52,4).
Вы можете хранить попытки для каждого IP в дереве, где вы группируете плотные частидерево вместе.Затем просто добавьте его в корзину (постройте новое дерево каждые 10 минут, оставьте старое дерево еще на 10 минут).Возможно, это ошибочное предположение о том, что соседние IP-адреса, вероятно, будут демонстрировать аналогичное поведение, но изящно превращается в кластеризацию IPv4 в (скажем) /24's. * 10101 *
Если вы чувствуете себя особенно щедрым, вы можете сохранить отдельныйфайл cookie при входе в систему, который не очищается при выходе из системы, и сохраните копию в базе данных (случайное 128-битное значение должно быть достаточно хорошим).При попытке входа в систему браузер должен быть «лучше», если он предоставляет правильный файл cookie (например, разрешить 3 попытки для этого файла cookie без учета количества ошибок на уровне IP или пользователя).Это означает, что последний компьютер, использовавшийся для доступа к учетной записи, не был представлен с помощью CAPTCHA, даже когда учетная запись пользователя взломана.
В целом, более полезно говорить об энтропии пароля, чем о длине пароля и типах "символов "- я почти уверен, что почти все просто пишут заглавные буквы и ставят 1 на конце.Я также еще не видел "удобных для человека" генераторов паролей, которые бы также указывали энтропию паролей.