ユーザーが複数回(15〜20)検証に失敗した場合、規定の制限時間内にユーザーのIPアドレスをブロックするにはどうすればよいですか。これは、ブルートフォース攻撃から保護するために実装されます。
これをyiiに実装する必要があります。コントローラでphpヘッダー関数を使用して実装しようとしましたが、うまくいきませんでした。また、制限時間を設定するのはどうですか?ブロックに制限時間を設定するにはどうすればよいですか?
コメントで示唆されているように、私はYiiの' onBeginRequest 'イベントを使用してこのチェックを開始し、必要に応じて次のように呼び出し元をブロックします(単なる例)。
'onBeginRequest' => array('YourClass', 'staticMethod'),
これは、main.phpマスター構成ファイルを編集してクラス内の静的メソッドを呼び出し、必要に応じてチェックを実行して要求をブロックすることで実現できます。これは、私が取り組んでいるYiiベースのプロジェクトで、私が持っているいくつかの監視要件を達成するために行う方法です。このメソッドが呼び出されると、ベルトにYiiのすべての内部コンポーネントがあります。
送信者のIPアドレスを知る必要がある場合は、 PcMaxmindGeoIp拡張機能のgetRemoteIpAddress()を使用するなど、_SERVER['REMOTE_ADDR']よりも堅牢なものを使用することをお勧めします。
私はyiiを知りません、私はただ基本的な論理を与えています。訪問者のIPアドレスを、訪問者がサイトにアクセスした回数とともにデータベースに保存します。このIPアドレスが20回以上アクセスした場合は、エラーページにリダイレクトしてください。例
$ipaddress=$_SERVER['REMOTE_ADDR'];
$sql="SELECT number_of_tries FROM table where ip_address='$ipaddress'";
//lets say from above query the value comes -
$number_of_tries=20; // this comes from database
if($number_of_tries>20){
header("location: forbidden.php");
exit;
}
IPアドレスと一緒に日時を保存することもできます。上記のクエリでは、現在の日付をデータベースの日付と比較してからリダイレクトします。
お役に立てれば
序文:yiiのフレームワークがわからないので、これが間違ったツリーである場合は、答えを削除してください。
ログイン時にチェックされるデータベーステーブルに問題のあるIPを(IPはその時間が経過するまでログインできないことを示す「有効期限」とともに)保存しないのはなぜですか。ログインに成功すると、問題のあるIPアドレスを削除できます。
試してみてください: