在会话中存储什么?

时间:2010-04-26 19:43:05

标签: php security session

我知道会话固定和劫持的所有问题。我的问题非常基本:我想用PHP创建一个身份验证系统。为此,登录后,我只会将用户ID存储在会话中。

但是:我看到有些人做了一些奇怪的事情,例如为每个用户和会话生成一个GUID,并在会话中存储而不仅仅是用户ID。为什么?

客户无法获得会话内容 - 或者可以吗?

4 个答案:

答案 0 :(得分:4)

你是对的。客户端只看到随机生成的会话ID令牌。有些方法可以滥用此令牌(被劫持等),但在顶部使用GUID不会增加任何内容。相比之下,像session.cookie_httponly这样的选项(JavaScript无法查看会话cookie)session.cookie_secure(Cookie只能通过HTTPS传输)可以防范某些攻击情形。

答案 1 :(得分:2)

简短的回答是$ _SESSION 安全,您无需担心其内容泄漏给用户或攻击者。

用户通常无法访问会话的内容。你应该能够存储用户的主键,你会没事的。有些会话可以泄露,在正常的Linux系统上会话文件夹在/ tmp中,但是这可以在php.ini中更改为web根目录(/ var / www / tmp)然后可以访问。唯一的另一种方法是,如果用户能够通过劫持对eval()的调用或正常打印的变量来访问$ _SESSION超级全局。

如果您在共享主机上运行并使用旧版本的PHP和/或您的服务器配置错误,则此系统上的其他用户可能会读取甚至修改存储在/ tmp /中的会话文件。我不知道有一个应用程序会考虑这种攻击。如果这是一个问题,您可以将信息存储在数据库的session表中。

答案 2 :(得分:1)

有时,为了增加安全性,开发人员可能会为用户的会话分配一个长字符串,以使劫持变得更加困难。通过在创建会话时使用此新字符串设置cookie,应用程序可以在后续请求中检查正确的字符串,以更好地确保它是实际登录的人。

这只是增加了一个想要劫持者想要猜测的东西。但是,它可能是一种虚假的安全感,因为如果涉及嗅探,它几乎无法保护会话,因为新的cookie与php会话cookie一起发送。此外,会话ID非常难以猜测(因为我确定你知道,只是不要把它放在网址中,而是放在cookie中)。

会话信息存储在硬盘驱动器上,因此客户无法在没有应用程序干预的情况下获取它。

答案 3 :(得分:1)

我从未见过GUID被用于会话,但是我看到的其他几种方法确实增加了一些安全性。

  • 存储用户的IP - 如果您需要根据位置强制更改会话(有时geoIP会执行此操作)
  • 存储用户的HTTP_USER_AGENT标头字符串。如果劫持者恰好使用不同的浏览器,可以提供一些安全措施来防止劫持。

实际上,维基百科上的session hijacking countermeasures上有一篇很棒的文章。

话虽如此,我认为任何将GUID作为会话的一部分存储在会话安全中的人都可能无法看到更好的解决方案(例如会话重新生成)。我可以看到存储GUID的其他用途(也许它是游戏的随机生成器的一部分),但不能用于会话安全性。