Проблема здесь в том, что при каждом вызове autoDefender
локальная переменная $logins
сбрасывается на 0
.Таким образом, состояние того, сколько попыток действительно имело место, не поддерживается для нескольких вызовов autoDefender
.
. Вам необходимо постоянно хранить эту информацию где-нибудь.В вашем случае даже для нескольких запросов.
Обратите внимание, что это также создает поверхность атаки для атак типа «отказ в обслуживании», поскольку вы можете заблокировать других пользователей.Поэтому вам следует дважды подумать, кому вы приписываете неудачную попытку.Если вы делаете это для каждого пользователя, вы, злоумышленник, можете заблокировать множество пользователей, когда делаете массовую атаку на всех пользователей.Если вы сделаете это для каждого удаленного клиента (например, IP-адрес), вы можете заблокировать других невинных пользователей, которые просто используют ту же систему (например, сеть компании или университета).Если вы делаете это за сеанс, злоумышленник может просто сбросить выданный идентификатор сеанса.