У вас там есть пара хороших элементов управления, но вам действительно следует усилить их. Обычный пользователь не должен выходить из системы более пяти раз. Если он это сделает, покажите ему капчу.
Помните, что ни при каких обстоятельствах вы не должны блокировать аккаунт. Это называется уязвимостью блокировки учетной записи. Это позволяет произвольному пользователю выйти из службы другим пользователям (DOS, отказ в обслуживании).
Я много раз сталкивался с этой проблемой регулирования входа в систему, и мне нравится то, что вы создаете поле неудачных попыток и дату последней неудачной попытки в вашей базе данных. Всякий раз, когда кому-либо (кому-либо) не удается войти в учетную запись X, вы увеличиваете значение неудачных попыток X и обновляете дату последней неудачной попытки. Если число неудачных попыток превышает Y (например, пять), то покажите CAPTCHA для конкретного пользователя. Таким образом, у вас не будет огромной базы данных запрещенных IP-адресов для регулирования формы входа, вместо этого у вас будет всего два поля на пользователя. Также не имеет смысла запрещать / регулировать на основе IP-адресов из-за ботнетов и прокси (как легальных, так и нелегальных). Когда выйдет в моду IPv6, я полагаю, вы будете более обречены. Гораздо больше смысла регулировать на основе целевых учетных записей. Таким образом, когда ваша учетная запись X направляется ботнетом, форма входа будет ограничена CAPTCHA. Очевидным недостатком здесь является то, что если ваша CAPTCHA дает сбой ... то же самое происходит и при входе в систему.
Итак, по сути это выглядит так:
- Кто-то не смог войти в учетную запись X - увеличить поле неудачных попыток.
- Если существует более 5 неудачных попыток, а последняя неудачная попытка произошла час назад, похоже, что учетная запись подверглась атаке, покажите CAPTCHA.
- С другой стороны, если последняя неудачная попытка произошла более суток назад, создается впечатление, что атака окончена, опустите щиты и не требуется CAPTCHA.
Это в основном щит, который включается при массированной целевой атаке на определенные аккаунты. Преимущество такого подхода заключается в том, что не имеет значения, владею ли я фермой ПК по всему миру - я не могу перебить одну учетную запись, потому что она основана на учетной записи.
Две плохие вещи в этом - то, что если CAPTCHA терпит неудачу, у вас ничего не останется. Конечно, вы можете улучшить эту ситуацию, установив другие средства защиты. Вторая проблема заключается в том, что, если бы у меня была бот-сеть, я мог бы использовать один ПК на одну учетную запись, и тогда, вероятно, с миллионной компьютерной сетью я взломал бы хотя бы одну учетную запись, но этот подход работает только для нецелевых атак.
Надеюсь, это заставило вас задуматься.