【问题标题】:open_basedir vs sessionsopen_basedir 与会话
【发布时间】:2010-04-08 15:59:57
【问题描述】:

在虚拟主机服务器上,我将每个虚拟主机的 open_basedir 设置为 .:/path/to/vhost/web:/tmp:/usr/share/pear。我有一个运行 WordPress 的客户,他因此抱怨 open_basedir 错误: PHP 警告:file_exists() [function.file-exists]:open_basedir 限制生效。文件(/var/lib/php/session/sess_42k7jn3vjenj43g3njorrnrmf2)不在允许的路径内:(.:/path/to/vhost/web:/tmp:/usr/share/pear) 因此 PHP 会话 save_path 不包含在 open_basedir 中,但服务器上所有站点的会话似乎除了在这个间歇性实例中工作正常。我认为可能是默认会话处理程序忽略了 open_basedir 而这个警告是由 WP 直接访问会话文件引起的。

但是,据我所知,PHP 5.2.4 将 open_basedir 检查引入了 session.save_path 配置:http://www.php.net/ChangeLog-5.php#5.2.4 (我使用的是 PHP 5.2.13)。

有什么想法吗?

【问题讨论】:

  • 这不是一个编程问题。应该搬到旧金山。
  • 对不起,因为它与 PHP 相关,我在这里发布,但我可以看到它可能与 SF 更相关,将在那里发布。我需要结束这个问题吗?

标签: php


【解决方案1】:

设置ini文件中的session.save_path指向open_basedir内部并添加.htaccess文件防止用户使用浏览器访问文件?

C.

【讨论】:

    【解决方案2】:

    PHP 手册说:“特殊值 . 表示将使用脚本的工作目录作为基目录。但是,这有点危险,因为脚本的工作目录可以很容易地用 chdir 更改()。”

    让所有虚拟主机指向同一个 session.save_path 也不是最好的主意。 PHP 脚本可以轻松更改垃圾收集设置。在会话文件中没有关于拥有应用程序的信息。垃圾收集器将收集所有可访问的文件。如果您想知道为什么会话比预期更早到期,原因可能是其他应用程序的到期时间更短。从安全的角度来看,每个应用程序都应该使用自己的会话文件目录。

    现在很容易解决问题。在这个 vhost 的 open_basedir 中包含单独的 session.save_path。然后询问 WordPress 人员,为什么 PHP 脚本应该可以访问其他用户的会话数据。

    【讨论】:

      猜你喜欢
      • 2012-02-21
      • 1970-01-01
      • 2011-01-01
      • 2015-01-16
      • 2014-01-13
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 2011-09-09
      相关资源
      最近更新 更多