最後にやりたいことは、失敗したすべてのログイン試行をデータベースに保存することです。これは十分に機能しますが、DDOS攻撃によってデータベースサーバーがダウンするのは非常に簡単です。
おそらく、ウェブサーバーでmemcachedなどのサーバー側キャッシュを使用している可能性があります。これらは、IPアドレスやユーザー名で失敗した試行を追跡するために使用するのに最適なシステムです。失敗したログイン試行の特定のしきい値を超えた場合は、データベース内のアカウントを非アクティブ化することを決定できますが、失敗したログインカウンターのために、永続ストレージへの読み取りと書き込みの束を保存する必要はありません。持続します。
人々がブルートフォース認証を行わないようにしたい場合は、Gumboが提案したようなスロットリングシステムがおそらく最も効果的です。通常の状況下、または攻撃が行われている間でも、正当なユーザーへの影響を最小限に抑えながら、ブルートフォース攻撃を攻撃者にとって無関心にします。memcachedなどでIPによる失敗した試行をカウントすることをお勧めします。極端に分散したブルートフォース攻撃の標的になった場合は、攻撃者が実際に同じユーザー名を頻繁に試します。数え切れないほどの数のIPアドレスからの試みのように、試みが極端に分散されていない限り、最初のby-IPコードは、攻撃者をかなり適切に阻止するはずです。
IPアドレスの数が限られている国からの訪問者の問題を防ぐための鍵は、しきい値を厳しくしすぎないようにすることです。数秒以内に複数回の試行を受け取らなければ、おそらく再心配する必要はあまりありません。スクリプト化されたブルートフォーシング。他のユーザーのパスワードを手動で解明しようとする人々にもっと関心がある場合は、ユーザー名によって、その後のログイン試行の失敗に対してより広い境界を設定できます。
もう1つの提案は、あなたの質問には答えませんが、ある程度関連していますが、エンドユーザーに一定レベルのパスワードセキュリティを適用することです。大文字と小文字が混在している、少なくともx文字、辞書以外のパスワードなどを要求することはしません。まだサインアップしていないときに、多くの人を悩ませたくないからです。ユーザーが自分のユーザー名をパスワードとして使用するのを阻止するだけで、サービスとユーザーを最も洗練されていない攻撃から保護するのに非常に役立ちます。