不会;t regenerate_session_id为截获会话id的用户重新生成id


Wouldn't regenerate_session_id regenerate the id for someone who intercepts a session id?

我很难理解这一点,我认为我对网络漏洞的无知是罪魁祸首。我对会话固定的理解是这样的:

  • 黑客利用某些漏洞来获取当前登录用户的会话id
  • 黑客使用会话id访问网站,窃取会话并有效登录

建议您使用regenerate_session_id来减少黑客拦截会话的机会。现在,这难道不会触发regenerate_session_id,用会话id更新黑客,同时注销最初登录的用户吗?这似乎弊大于利,所以我知道我一定在这里错过了一些东西。我错过了什么?

session_regenerate_id是防止会话劫持的好方法,因为劫持通常发生在会话id被盗后的后续步骤中。

例如:

  1. 访问XSS注入的论坛
  2. 点击链接就会窃取会话
  3. 用户意识到这不是他想要的,按下
  4. 站点重新生成一个新的会话id,用户被保存,会话固定不会发生,因为被盗的会话id可能不会立即被服务器使用

如果出于任何原因,固定是实时的、非常快速的,比如自动化的过程,那么不,你是对的,这不会拯救用户。这就是为什么您不应该只依赖session_regenerate_id,还应该依赖用户的IP地址。

if(!session_id()){
    session_start();
    if(!isset($_SESSION['user_ip'])){
        $_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR'];
    }
    if($_SESSION['user_ip'] !== $_SERVER['REMOTE_ADDR']){
        exit('highjacking detected, session terminated');
    }
    session_regenerate_id();
}

显然,如果黑客来自同一个网络,例如工作场所,ip检测将不起作用,因此您也可以使用UserAgent检查。但这有点过头了,这取决于你的数据的敏感性。

希望它能帮助。。。