ベストプラクティスについて詳しく説明するには:
krosenvoldのコメント:ユーザーテーブルにnum_failed_loginsとlast_failed_timeを記録し(ユーザーが一時停止されている場合を除く)、失敗したログインの数がしきい値に達したら、ユーザーを30秒または1分間一時停止します。これがベストプラクティスです。
この方法は、単一アカウントのブルートフォース攻撃と辞書攻撃を効果的に排除します。ただし、攻撃者がユーザー名を切り替えることを防ぐことはできません。パスワードを固定し、多数のユーザー名で試してみてください。サイトに十分なユーザーがいる場合、その種の攻撃は、停止されていないアカウントが不足してヒットする前に、長期間継続することができます。うまくいけば、彼は単一のIPからこの攻撃を実行するので(ボットネットが最近実際に取引のツールになっているため、そうは思われません)、それを検出してIPをブロックできますが、攻撃を分散している場合は...さて、それは別の質問です(私はここに投稿したばかりなので、まだ投稿していない場合はチェックしてください)。
元のアイデアについて覚えておくべきもう1つのことは、アカウントが攻撃されて一時停止されている間でも、つまり、実際のユーザーとボットを区別できる場合でも、もちろん正当なユーザーを通過させようとする必要があるということです。
そして、少なくとも2つの方法でできます。
ユーザーが永続的なログイン(「rememberme」)Cookieを持っている場合は、通過させてください。
「ログインに失敗したため、アカウントが停止されました」というメッセージが表示されたら、「安全なバックアップログイン-HUMANS ONLY(ボット:嘘なし)」というリンクを含めてください。冗談はさておき、彼らがそのリンクをクリックしたときに、アカウントの一時停止ステータスをバイパスするreCAPTCHA認証済みのログインフォームを提供します。そうすれば、彼らが人間であり、正しいログイン+パスワードを知っている(そしてCAPTCHAを読み取ることができる)場合、彼らは遅延に悩まされることはなく、あなたのサイトは急速な攻撃の影響を受けません。
唯一の欠点:一部の人(視覚障害者など)はCAPTCHAを読み取ることができず、自動ログイン機能を使用していない場合でも、ボットによって生成される迷惑な遅延の影響を受ける可能性があります。
欠点ではありません。自動ログインCookieには、同様のセキュリティ対策が組み込まれていません。なぜこれが欠点ではないのですか?賢明に実装している限り、ログインCookieのセキュアトークン(同等のパスワード)はパスワードの2倍のビット数(つまり、10倍のビット数になります!)であるため、ブルートフォース攻撃になります。事実上問題ありません。ただし、本当に気が狂っている場合は、自動ログイン機能にも1秒の遅延を設定してください。