0

簡単なセッション管理スクリプトを作成したいのですが、それについてどう思いますか? 論理的に正しいですか?

https が利用できない場合は、負荷ごとに session_regenerate_id を使用することが解決策になる可能性があります。

if($_SESSION["user"]["logged"] && is_numeric($_SESSION["user"]["id"])){    
    $id = $_SESSION["user"]["id"];  
    $sid = file_get_contents($id);  // read from db the previous key 
    if($sid == $_SESSION["user"]["key"]){  
        echo "<p><a href='?logout'>logout</a></p>";  
        echo "<p><a href='/login.php'>refresh</a></p>";  
        session_destroy();  
        session_start();  
        session_regenerate_id(true);  
        $_SESSION["user"]["logged"] = true;  
        $_SESSION["user"]["id"] = $id;  
        $_SESSION["user"]["key"] = uniqid();  
        file_put_contents($id, $_SESSION["user"]["key"]);  // write to db the new key 

    }  
    else {
        // logout
    }  
}  

前もって感謝します!

4

1 に答える 1

0

httpsが利用できない場合は、毎回のロードでのsession_regenerate_idが解決策になる可能性があることを読みました。

何のための解決策?SSL / TLSは、トランスポートレベルのセキュリティを提供し、ユーザーとの間で転送中のデータを保護します。すべてのリクエストでセッションIDを再生成することは、trasportのセキュリティとは何の関係もありません。輸送中に誰もあなたのクッキーを捕まえることができないのは事実ですが、それがソモエネがこのクッキーを手に入れることができる唯一の方法ではありません。つまり、ページがXSSになりやすい場合、ソーシャルエンジニアリングの助けを少し借りた人がCookieを盗む可能性があります。

誰かがユーザーセッションIDCookieを盗むが、それを使用して要求を行うのに十分な速度がない場合、ユーザーが盗まれた値を使用できないようになる前に、再生成するとエンドポイント(ユーザー)のセキュリティを向上させることができます(これは議論の余地があります)(これは彼が盗んだ値を使用することを防ぐ可能性があります)それほど速くはありません)。

したがって、一般的に、このスキームをそのままにしておきたくない場合は、SSL/TLの代わりにはなりません。また、ログイン後の再生成は必須であり、各要求での再生成は追加です。

于 2012-11-30T10:18:41.157 に答える