我已经阅读了关于加密PHP会话数据的多条评论,以防它存储在共享服务器上多个帐户上可用的临时目录中。但是,即使数据已加密,session_start()仍会生成包含session_id的文件名。例如,
sess_uivrkk2c5ksnv2hnt5rc8tvgi5
,其中uivrkk2c5ksnv2hnt5rc8tvgi5与我在浏览器收到的cookie中找到的会话ID相同。
这个问题通常是如何解决的/有人能指出我的例子吗?我发现的所有简单示例都只解决加密数据的问题,而不是更改文件名。
为了看看会发生什么,我创建了一个SessionHandler包装器,它会在$ session_id变量上执行MD5哈希,然后将其传递给它的父函数,但这不起作用。相反,我最终得到了两个文件:一个空白的文件(session_id作为其名称的一部分)和一个完整的文件(带有MD5的session_id)。此外,还存在close()不接受session_id作为参数的问题,因此我无法将其传递给其父级。
编辑:我正在学习php会话,这不适用于现场商业网站等。答案 0 :(得分:0)
是的,在某些情况下(即,一个非常无法配置的服务器 - 尽管这些服务器不幸存在)在共享服务器上,您的会话数据可能是其他人可读的。试图通过更改其名称来隐藏会话文件没有任何用处 - 这被描述为“通过Obscurity安全”。 Go和Google这句话 - 它通常被描述为矛盾。
如果您的问题是如何阻止其他客户在配置错误的服务器上访问您的会话数据,那么合理的选择(按优先级顺序)是:
如果您想了解您的提供商是否可能是罪魁祸首 - 只需查看文件的值即可。它看起来好像你有权访问根文件系统吗?编写一个尝试从主目录外部读取的脚本。如果你不能,那么提供者可能已经设置了open_basedir限制(可以解决这个问题 - 谷歌会告诉你如何)。