PHP - 会话安全性和可靠性

PHP - Sessions security and reliability

我目前正在学习 PHP,我想出了一个关于 Sessions 的问题。在做这个 post 之前,我已经阅读了一些关于这个主题的信息和主题,例如 this one,但是其中大部分都有些老了,所以我想确保我'我以正确的方式处理它们。

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

$_SESSION['check'] = hash('ripemd128', $rand1 . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $rand2).

该值被发送到数据库,在每一页中,我都在检查数据库中的值是否与 $_SESSION['check'] 变量匹配;

$_SESSION = array(); setcookie(session_name(), '', time()-259200, '/'); session_unset(); session_destroy();

这样,假设放入会话变量的值得到了正确验证,我可以 100% 信任我的会话变量吗?如果不是,我可以 improve/change 怎样让他们更安全?

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

谢谢。

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

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

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

底线:任何形式的额外检查和保护都是无用的。如果您使用的是 HTTPS,并且有人仍然 能够劫持会话,那么无论哪种方式,您基本上都是 SOL。不要打扰。如果您不使用 HTTPS,请立即开始使用它