Это похоже на чрезмерную инженерию. Я бы просто отслеживал неудачные попытки входа в систему и после $ x количества неудачных попыток входа в систему вы затем блокировали IP-адрес от попытки другого входа в систему в течение 1-24 часов или около того.
Если вы обеспокоены тем, что кто-то нацелен на конкретную учетную запись, вы можете отметить количество неудачных попыток для определенного имени пользователя и затем принять соответствующие меры, такие как ограничение количества неудачных входов в систему для этого имени пользователя до 2 или 3 за 24 часа на любом ip адрес.
Я могу придумать способы, с помощью которых вы можете попытаться обнаружить словарные / грубые атаки с помощью сравнения, но вам придется собирать данные пользователя и сравнивать их с предыдущими попытками, это может быть проблемой безопасности, если вы храните немного с ошибками допустимые пароли в базе данных. Кроме того, для каждого входа в систему потребуется довольно много ресурсов процессора.
Цель должна состоять в том, чтобы сделать его интенсивно медленным для злоумышленников, но не раздражать и не идти на компромисс для законных пользователей.
Хотя теперь, когда я думаю об этом немного больше, метод предотвращения также может быть способом отказа в обслуживании, блокируя пользователям возможность входа в систему, поэтому примите это к сведению.