【问题标题】:How secure this simple session management?这个简单的会话管理有多安全?
【发布时间】:2012-11-30 18:18:41
【问题描述】:

我想创建一个简单的会话管理脚本,知道您的想法吗?逻辑上正确吗?

我读到如果 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
    }  
}  

提前谢谢你!

【问题讨论】:

    标签: security session


    【解决方案1】:

    我读到如果 https 不可用,那么每次加载时的 session_regenerate_id 可能是一个解决方案,对吧?

    解决方案是什么? SSL/TLS 提供传输级别的安全性,保护您在与用户之间传输的数据。在每个请求上重新生成会话 ID 与传输安全无关。的确,没有人能够在运输途中抓住您的 cookie,但这并不是 somoene 获得此 cookie 的唯一方法。即,如果您的页面容易受到 XSS 攻击,那么稍微借助社会工程的人就可以窃取您的 cookie。

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

    所以总的来说,如果您不想这样,您的方案是好的,它不是 SSL/TL 的替代品。并且登录后重新生成应该是必须的,每次请求的重新生成都是一个补充。

    【讨论】:

    • 其实我想知道如何在 2012/2013 年创建安全登录和用户处理程序脚本,以及我必须做些什么来保证数据的安全。你能推荐我一个关于这个问题的最新脚本或描述吗?
    • 感谢您的回复!我读了这个答案stackoverflow.com/questions/4113225/… 如果我的脚本在共享主机上运行但我可以更改会话存储目录(tmp)我也读过(但我可以找到链接)我不需要使用客户会话管理。这是真的吗?网上有很多信息,不幸的是我无法确定哪个是正确的...... :(
    • 会话管理是一回事(数据绑定到用户系统会话),但会话也用于存储认证相关数据,这是整个问题的关键。您需要设计安全会话实例化。一件事是序列化会话数据的前缀存储,另一件事是发出有效的会话标识令牌!我推荐阅读:owasp.org/index.php/Session_Managementowasp.org/index.php/… 它适用于 java,但它也很清楚,所以你会理解它。
    猜你喜欢
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 2013-12-01
    • 2011-12-23
    • 2016-03-23
    • 2013-10-03
    • 2021-05-19
    • 2016-10-23
    相关资源
    最近更新 更多