在会话中存储什么?

eWo*_*olf 7 php security session

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

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

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

Mat*_*hen 5

没错 客户端只会看到随机生成的会话ID令牌。有几种方法可以滥用此令牌(劫持等),但在GUID顶部没有任何作用。相反,session.cookie_httponly(JavaScript无法看到会话cookie)之类的选项session.cookie_secure(Cookie仅可通过HTTPS传输)可防止某些攻击情形。


roo*_*ook 3

简而言之,$_SESSION 是安全的,您无需担心其内容会泄露给用户或攻击者。

用户通常无法访问会话的内容。您应该能够存储用户的主键,就可以了。在某些情况下,会话可能会被泄露,在普通的 Linux 系统上,会话文件夹位于 /tmp 中,但是可以在 php.ini 中将其更改为 Web 根目录 (/var/www/tmp),然后就可以访问。唯一的其他方法是用户是否能够通过劫持对 eval() 的调用或正常打印的变量来访问 $_SESSION 超级全局。

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