ログイン試行の制限についていくつかの質問がありましたが、ログイン試行の記録の長所や短所、例えば、私が興味を持っていないCaptchas対スロットルの問題)。代わりに、私は、この情報をデータベースに記録するのに役立つがパフォーマンスにはあまり影響を与えない最良の方法を見つけようとしています。brute forcingを防ぐために失敗したログインを記録するデータベースの設計
アプローチ1)IPアドレス、試行したユーザー名、および試行時間を記録するテーブルを作成します。ユーザーがログインしようとすると、selectを実行して、最後の5分間にユーザー名が試行された回数(または特定のIPアドレスが過去5分間に何回試みられたか)を判断します。一定量以上の場合は、ログイン試行を抑制するか、キャプチャを表示してください。
これにより、ユーザ名とIPアドレスの両方に基づいた絞り込みが可能です(攻撃で複数のユーザ名が1つのパスワードで試されている場合)。また、監査の記録を簡単に作成できますが、ログイン試行ごとにINSERTが必要です。少なくとも1つの余分なSELECT。
アプローチ2)失敗した試行の回数と最後のログイン時間を記録する同様のテーブルを作成します。これにより、データベーステーブルが小さくなり、SELECTステートメントが高速になり(COUNTは必要ありません)、制御が少ししかなく、分析するデータも少なくなります。
アプローチ3)アプローチ2と同様ですが、この情報をユーザーテーブル自体に格納します。つまり、追加の、おそらく不要な情報をusers表に追加しますが、追加のSELECT文は必要ありません。また、アプローチ1が提供する余分な制御と情報も許可されません。
追加のアプローチ:mysql MEMORYテーブルまたはsqliteインメモリテーブルにログイン試行を保存します。これにより、ディスクのパフォーマンスによるパフォーマンスの低下は軽減されますが、依然としてデータベースの呼び出しが必要となり、データが永続的でないためログイン試行の長期監査ができなくなります。
これを行う良い方法や自分で実装したことについての考えはありますか?
他の誰かがブルートフォースを試みているため、正当なユーザーをブロックしないように、username to IPと言うことができますか? – Meep3D
1人のIPから複数のユーザーがいる場合はどうなりますか? – nilamo
Meep3D:それは良い点であり、必要なセキュリティのレベルに依存します。ブロッキングの代わりにキャプチャを使用すると、DOSの問題を緩和できます。 nilamo:そのIPからの無効なログインの数は明らかにかなり高く保たれるべきですが、短期間に一定数の無効なログインでは、captchaが賢明に思えます。 –