这个简单的会话管理有多安全?

时间:2012-11-30 05:04:59

标签: security session

我想创建一个简单的会话管理脚本并知道你对它的看法?它在逻辑上是否正确?

我读过如果https不可用,那么evey load上的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
    }  
}  

提前谢谢!

1 个答案:

答案 0 :(得分:0)

  

我读过如果https不可用,那么evey load上的session_regenerate_id可以是一个解决方案,对吗?

解决方案是什么? SSL / TLS提供传输级安全性,保护您在传输到用户和从用户传输的数据。在每个请求上重新生成会话ID与trasport安全性无关。确实没有人能够在运输过程中抓住你的饼干,但这并不是索明能够抓住这个饼干的唯一方式。也就是说,如果您的页面容易出现XSS,那么在社交工程师的帮助下,有人可能会窃取您的cookie。

重新生成可以提高端点(用户)的安全性(尽管它是有争议的),因为如果有人会窃取用户会话ID cookie但是不够快,不能用它做出请求,那么用户将无法使用被盗的值(这是不太可能他不那么快)。

所以一般来说,如果你不想这样做,你的方案是好的,它不是替代SSL / TL。登录后的renegeration应该是必须的,每次请求的再生是一个补充。