ログイン試行回数を保存するためにセッションを使用しようとしています。ログイン試行の最大数に達すると、クライアントのIPアドレスをブラックリストテーブルに保存します。
私が考慮に入れているいくつかのこと、あなたは知っておく必要があるかもしれません:
session_regenerate_id();
セッション値を設定した後に使用しています。- これは必要ではなく、2012年ではないため、セッション以外のCookieは使用していません:p
- ユーザーのIPは、ブラックリストテーブルから彼の行を手動で削除するまでブラックリストに登録されます。
- は
SESSION_MAX_ATTEMPTS
定義された定数であり、5に設定されます。 - この
index.php?module=login&task=blacklist
ページは、ブラックリストに登録されているというメッセージをユーザーに表示しているだけです。このページには機能がありません。 - カスタムビルドのphpフレームワークを使用しているので、メソッドと呼ばれるOOPを簡略化されたphpコードに変換する必要がありました。
ログインクエリが実行される前に、次の関数が呼び出されます。
private function preventAttack()
{
$blocked = getData("SELECT count(*) as blocked FROM blacklist WHERE ip = @Value0;", Array( $_SERVER['REMOTE_ADDR'] ));
if($blocked[0]["blocked"] == "1")
{
redirect("index.php?module=login&task=blacklist");
}
$old = (int)$this->session->get("login_attempts");
if(!empty($old))
{
if($old > SESSION_MAX_ATTEMPTS)
{
setData("INSERT INTO blacklist SET ip = @Value0;", Array( $_SERVER['REMOTE_ADDR'] ));
redirect("index.php?module=login&task=blacklist");
}
else
{
$old++;
$this->session->set("login_attempts",$old);
}
}
else
{
$this->session->set("login_attempts", 0);
}
}
最初のifステートメントは両方のクエリを含めて機能しますが、試行回数を保存するための最良の方法と、それを++するための最良の方法は何ですか?多分あなたたちは私を正しい方向に向けることができます。
私のコードについて質問がある場合は、コメントを追加してください。フレームワークからのものなので、少し読めないことはわかっています。投稿する前に少し翻訳しました。