open_basedir vs sessions

时间:2010-04-08 15:59:58

标签: php

在虚拟主机服务器上,我将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上)。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

下进行。

答案 1 :(得分:0)

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

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

现在很容易解决问题。在此vhost的open_basedir中包含已分隔的session.save_path。然后询问WordPress人员为什么PHP脚本应该能够访问其他用户的会话数据。