繁体   English   中英

Cookie和存储中的PHP会话ID

[英]PHP session id in cookie and storage

我已经阅读了许多有关加密PHP会话数据的评论,以防将其存储在共享服务器上多个帐户上可用的临时目录中。 但是,即使数据已加密,session_start()仍会生成包含session_id的文件名。 例如,

sess_uivrkk2c5ksnv2hnt5rc8tvgi5

,其中uivrkk2c5ksnv2hnt5rc8tvgi5是我在浏览器收到的Cookie中找到的相同会话ID。

通常如何解决此问题/有人可以给我指出一个例子? 我发现的所有简单示例都仅对数据加密,而不更改文件名。

我只是想看看会发生什么,所以我做了一个SessionHandler包装器,该包装器将$ session_id变量传递给MD5哈希之后再传递给它的父函数,但这没有用。 相反,我最终得到了两个文件:一个空白文件(其中session_id作为其名称的一部分)和一个完整文件(具有MD5的session_id)。 此外,还有close()不接受session_id作为参数的问题,因此我无法将其传递给其父级。

编辑:我正在学习有关php会话,这不是一个实时的商业网站,等等。

是的,在某些情况下(例如,配置非常差的服务器-尽管不幸的是确实存在),共享服务器上的会话数据可能被其他人读取。 试图通过更改会话文件的名称来隐藏会话文件没有任何用处-称为“通过隐蔽性进行安全性”。 Go和Google这个词组-通常被描述为矛盾词。

如果您的问题是如何防止其他客户在配置错误的服务器上访问您的会话数据,那么明智的选择(按优先级顺序)是:

  • 交换服务提供商
  • 使用自定义会话处理程序将数据存储在安全的地方(例如数据库),网络上有很多示例-质量各不相同
  • 使用自定义会话处理程序来加密数据并使用文件存储。 同样,您不需要自己编写代码-只需仔细检查所有候选者

如果要确定您的提供者是否是罪魁祸首-只需看一下FILE的值即可。 看起来好像您有权访问根文件系统? 编写一个脚本,尝试从您的主目录外部读取。 如果您不能这样做,则提供程序可能设置了open_basedir限制(可以解决此问题-Google会再次告诉您如何操作)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM