PHP - 会话安全性和可靠性

时间:2017-07-26 15:38:28

标签: php security session-variables

我正在学习PHP,我提出了一个关于Sessions的问题。在发表这篇文章之前,我已经阅读了一些关于这个主题的信息和主题,例如this one,但是大部分都有点陈旧,所以我想确保我正在处理它们正确的方式。

所以,这是我的问题:假设以下项目为真,

  • 登录后,我正在使用session_regenerate_id()重新生成PHP会话ID;
  • 登录后,我正在创建一个带有编写代码的会话变量(它在开始和结束时结合了用户IP,浏览器和一些随机内容)

$_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%的会话变量吗?如果没有,我可以改进/改变什么来使它们更安全?

我问这个的原因是因为当用户登录时,我将一些信息保存到会话变量中以避免数据库被查询过载,所以我需要确保它们不会被泄露。

谢谢。

1 个答案:

答案 0 :(得分:0)

整个舞蹈和歌曲与散列(而不是“encripting”!)用户代理和带有一些随机值的IP是非常多余的。我也没有看到在每次请求时用它来打扰数据库的重点。

有什么好处,你想阻止什么?如果有的话,你想防止会话劫持。让我们详细看一下:

  • 会话劫持意味着中间人或其他第三方能够窃取用户的会话cookie。你可以简单地用HTTPS来防止这种情况,这是你能做的唯一真实的事情。
  • 如果用户计算机上的某些恶意软件窃取了cookie而不是MitM,则HTTPS无效。在这种情况下,攻击者可能会完全坐在其他地方。在这种情况下,检查IP会有所帮助。检查用户代理在很大程度上是多余的,因为它很容易被模仿。
  • 要检查IP,您只需将IP直接存储在会话中并执行简单的if ($_SESSION['ip'] !== $_SERVER['REMOTE_ADDR']);散列不会向该过程添加任何内容。
  • 请注意,IP可能会突然合法地更改,这会使登录失效。
  • 请注意,能够窃取某人cookie的恶意软件也可能会冒充他们自己计算机的用户,在这种情况下,任何检查都不会做任何事情。

底线:任何类型的额外检查和保护都是无用的。如果您正在使用HTTPS并且某人仍然能够劫持会话,那么无论如何您都是SOL。不要打扰。如果您没有使用HTTPS,请立即开始使用现在