我试图了解会话在 PHP 中的工作方式,发现会话数据默认存储在文件系统中。在共享主机环境中,任何用户编写的 PHP 脚本都可以读取会话数据。如何防止这种情况?
5 回答
您可以覆盖脚本的会话保存处理程序以使用文件系统以外的其他内容,例如数据库或内存缓存。这是一个详细的实现: http: //phpsec.org/projects/guide/5.html
取决于您对 php.ini 文件的访问级别 - 如果您在运行 suPHP 并允许您拥有自己的 php.ini 文件(例如)的共享主机环境中,那么您可以简单地设置会话。 save_path 到 ~/tmp 之类的路径,而不是通常共享的 /tmp。
不过,首先,我认为您实际上无法从其他应用程序中读取 php 会话数据。我相信这对于观看它的人来说是相当独特的。
最后 php Session 数据不只是文件系统保存而已。它也可以设置为保存在用户机器上的 cookie 中,或者您可以设置 php 会话数据以存储在数据库中。
编写您自己的 SESSION 包装器。
例如 CodeIgniter 的会话库并不依赖于 PHP 的原生会话库,而且更安全:
注意:Session 类不使用原生 PHP 会话。它生成自己的会话数据,为开发人员提供更大的灵活性。
您可以使用session_save_path()将会话数据目录更改为非共享目录。
使用 session_save_path() 并更改您的会话文件夹,如“/htdocs/storage/sessions”。现在会话只保存到您给定的路径。