是不是reinrate_session_id会为拦截会话ID的人重新生成id?

时间:2012-01-05 16:03:40

标签: php security session

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

  • 黑客使用一些漏洞来检索当前登录用户的会话ID。
  • 黑客使用会话ID访问网站,窃取会话并有效登录。

建议您使用regenerate_session_id来降低黑客拦截会话的几率。现在不会触发regenerate_session_id,用会话ID更新黑客,同时注销最初登录的用户?这似乎会造成更多伤害然后好,所以我知道我必须在这里缺少一些东西。我错过了什么?

1 个答案:

答案 0 :(得分:0)

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

例如:

  1. 访问XSS注入的论坛
  2. 点击链接并点击会话
  3. 用户意识到这不是他想要的,按回来
  4. 网站重新生成新的会话ID,用户已保存,会​​话固定不会发生,因为服务器可能不会立即使用会话ID被盗。
  5. 如果出于任何原因,固定变得像现场一样快速,例如自动化过程,那么不,你是对的,这不会拯救用户。这就是为什么你不应该只依赖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检查。但是根据数据的敏感性,这有点过分。

    希望它有所帮助...