1

ユーザーが現在のセッションにログインすると、変数が設定されます

$_SESSION['user']['timeout'] = time();
$_SESSION['user']['ip'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['user']['agent'] = $_SERVER['HTTP_USER_AGENT'];

私の common.php ページ (すべての php ページで必要) で、以下のスクリプトを使用しました。これは、ユーザーがアクティブになるたびに 15 分のタイマーをリセットし、さらに IP アドレスをチェックし、user_agent をチェックします。彼らが最初にログインしたとき/セッションが最初に設定されたとき、セッションはさらに設定解除され、最大15分間非アクティブで、セッションも設定解除されます。

...私が行ったことは、セッションハイジャックを防ぐための良い方法ですか?それは安全ですか?それとも十分ですか? そうでない場合、これ以上何ができるでしょうか?

if(!empty($_SESSION['user'])){  
    if ($_SESSION['user']['timeout'] + 15 * 60 < time()) {
        unset($_SESSION['user']); 
        } else {
        $_SESSION['user']['timeout'] = time();
        if($_SESSION['user']['ip'] != $_SERVER['REMOTE_ADDR']){
            unset($_SESSION['user']); 
        }
        if($_SESSION['user']['agent'] != $_SERVER['HTTP_USER_AGENT']){
            unset($_SESSION['user']); 
        }
    }
}
4

1 に答える 1

0

15 個のミニチュアの制限により、セッションがハイジャックされた場合、ユーザーが自分のマシンを離れたり電源をオフにしたりしている間 (そしてログオフしていない間)、攻撃者はそれを長時間使用できないことが保証されます。しかし、ユーザーが作業中に攻撃者がセッションを乗っ取った場合はどうでしょうか。IP アドレスを確認することは良い考えですが、これには小さな制限があります。ユーザーは静的 IP アドレスを持っておらず、ネットワークから切断され、再接続されています。新しい IP アドレスが割り当てられます。そして、この状況は、彼が有効なユーザーである間、彼のセッションを強制的に期限切れにします。また、このトリックは、有効なユーザーと同じプライベート LAN にいて、両方ともパブリック IP アドレスを持つゲートウェイの背後にいる攻撃者には何もしません。どちらもサーバーで同じIPアドレスを持っているためです(NATまたはゲートウェイのIPアドレス)。私の意見では、あなたがしたことは良いことです。しかし、Web サイトを XSS および CSRF 攻撃に対して安全にする方がよいでしょう。クライアントでの JavaScript インジェクションの防止。また、そのような攻撃を防ぐことが非常に重要である場合は、ssl を使用してネットワーク スニファに対しても安全を確保してください。

于 2012-11-12T23:35:52.000 に答える