我正在学习PHP,我提出了一个关于Sessions的问题。在发表这篇文章之前,我已经阅读了一些关于这个主题的信息和主题,例如this one,但是大部分都有点陈旧,所以我想确保我正在处理它们正确的方式。
所以,这是我的问题:假设以下项目为真,
session_regenerate_id()
重新生成PHP会话ID; $_SESSION['check'] = hash('ripemd128', $rand1 . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $rand2)
。
该值被发送到数据库,并且在每个页面中,我正在检查数据库上的值是否与$_SESSION['check']
变量匹配;
ini_set('session.use_only_cookies', 1)
启用Cookie,ini_set('session.use_trans_sid', 0)
也已设置; $_SESSION = array();
setcookie(session_name(), '', time()-259200, '/');
session_unset();
session_destroy();
这样,假设放入会话变量的值得到了适当的验证,我可以信任100%的会话变量吗?如果没有,我可以改进/改变什么来使它们更安全?
我问这个的原因是因为当用户登录时,我将一些信息保存到会话变量中以避免数据库被查询过载,所以我需要确保它们不会被泄露。
谢谢。
答案 0 :(得分:0)
整个舞蹈和歌曲与散列(而不是“encripting”!)用户代理和带有一些随机值的IP是非常多余的。我也没有看到在每次请求时用它来打扰数据库的重点。
有什么好处,你想阻止什么?如果有的话,你想防止会话劫持。让我们详细看一下:
if ($_SESSION['ip'] !== $_SERVER['REMOTE_ADDR'])
;散列不会向该过程添加任何内容。底线:任何类型的额外检查和保护都是无用的。如果您正在使用HTTPS并且某人仍然能够劫持会话,那么无论如何您都是SOL。不要打扰。如果您没有使用HTTPS,请立即开始使用现在。