【问题标题】:Wouldn't regenerate_session_id regenerate the id for someone who intercepts a session id?regenerate_session_id 不会为拦截会话 id 的人重新生成 id 吗?
【发布时间】:2012-01-06 00:11:55
【问题描述】:

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

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

建议您使用 regenerate_session_id 来减少黑客拦截会话的机会。现在不会触发 regenerate_session_id,用会话 id 更新黑客,同时注销最初登录的用户吗?这似乎会造成更多的伤害而不是好处,所以我知道我在这里的图片中一定遗漏了一些东西。我错过了什么?

【问题讨论】:

  • 如果会话 ID 在每个请求上都发生变化,它首先会降低黑客劫持会话的可能性
  • 我还读到过在每个请求上更改会话 ID 将是矫枉过正且不值得,这让我感到困惑。与强制执行更强的安全性相比,重新生成 id 的成本真的更高吗?

标签: php security session


【解决方案1】:

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 检查。但根据您数据的敏感性,这有点矫枉过正。

希望对你有帮助...

【讨论】:

  • session_regenerate_id() 应该在第一个参数设置为 true 的情况下调用。否则攻击者仍然可以使用旧的会话 id,因为默认情况下不会删除它。
  • @AudunLarsen 谢谢不知道:S
猜你喜欢
  • 2011-12-29
  • 2018-07-31
  • 2015-04-03
  • 1970-01-01
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-13
相关资源
最近更新 更多