Хранение попыток в базе данных является лучшим решением IMHO, поскольку оно предоставляет вам аудиторские записи попыток взлома безопасности. В зависимости от вашего заявления это может или не может быть юридическим требованием.
Записывая все неудачные попытки, вы также можете собирать информацию более высокого уровня, например, если запросы поступают с одного IP-адреса (т. Е. Кто-то / вещь пытается атаковать методом перебора), чтобы вы могли заблокировать IP-адрес. Это может быть ОЧЕНЬ полезная информация.
Как только вы определили пороговое значение, почему бы не заставить их запросить отправку электронного письма на их адрес электронной почты (т. Е. Аналогично «я забыл свой пароль»), или вы можете использовать подход CAPCHA.