我怎样才能放松PHP的open_basedir限制?

时间:2008-10-21 22:36:27

标签: php security apache

open_basedir限制了PHP在目录树中可以打开的文件。

我在Web根目录之外存储了几个类库和配置文件。这样,Web服务器不会使它们可公开访问。但是,当我尝试从我的应用程序中包含它们时,我得到一个open_basedir限制错误,如下所示:

  

警告:realpath()   [function.realpath]:open_basedir   限制有效。   文件(/var/www/vhosts/domain.tld/zend/application)   不在允许的路径内:   (/var/www/vhosts/domain.tld/httpdocs:/tmp)   在   /var/www/vhosts/domain.tld/httpdocs/index.php   在第5行

我的网络根目录在这里:

/var/www/vhosts/domain.tld/httpdocs

我的库和配置目录在这里:

/var/www/vhosts/domain.tld/zend

放宽open_basedir限制的最佳解决方法是什么,以便域文件夹下的目录树可供我的应用程序使用?我有很多域名需要我这样做,而且我显然也对创建安全漏洞持谨慎态度。

注意:我使用的是CentOS,Apache,Plesk,我对服务器有root ssh访问权限。虽然这不直接适用于Zend Framework,但我在这个实例中使用它。所以这里是Zend的bootstrap包含的内容:

define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../zend/application/'));
set_include_path(APPLICATION_PATH . '/../zend/library' . PATH_SEPARATOR . get_include_path());

3 个答案:

答案 0 :(得分:21)

您也可以使用Apache(假设这是您的Web服务器)配置文件(例如httpd.conf)在每个目录的基础上轻松完成此操作

<Directory /var/www/vhosts/domain.tld/httpdocs>
php_admin_value open_basedir "/var/www/vhosts/domain.tld/httpdocs:/var/www/vhosts/domain.tld/zend"
</Directory>

您也可以使用

完全删除限制
<Directory /var/www/vhosts/domain.tld/httpdocs>
php_admin_value open_basedir none
</Directory>

答案 1 :(得分:2)

将您需要访问的路径(/var/www/vhosts/domain.tld/zend)添加到open_basedir指令中(您可以使用路径分隔符':'或';'在Windows中指定多个路径)< / p>

请注意open_basedir中的值是前缀,这意味着/var/www/vhosts/domain.tld/zend下的任何内容都可以访问

答案 2 :(得分:1)

在Parallels Plesk Panel(例如1and1)中,您可以在PHP面板设置中执行此操作:

enter image description here

这里:

enter image description here