我很难理解这一点,我认为我对网络漏洞的无知是罪魁祸首。我对会话固定的理解是这样的:
- 黑客利用某些漏洞来获取当前登录用户的会话id
- 黑客使用会话id访问网站,窃取会话并有效登录
建议您使用regenerate_session_id来减少黑客拦截会话的机会。现在,这难道不会触发regenerate_session_id,用会话id更新黑客,同时注销最初登录的用户吗?这似乎弊大于利,所以我知道我一定在这里错过了一些东西。我错过了什么?
session_regenerate_id是防止会话劫持的好方法,因为劫持通常发生在会话id被盗后的后续步骤中。
例如:
- 访问XSS注入的论坛
- 点击链接就会窃取会话
- 用户意识到这不是他想要的,按下
- 站点重新生成一个新的会话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检查。但这有点过头了,这取决于你的数据的敏感性。
希望它能帮助。。。