设置目的

PHP 为了安全性考虑,有一项 open_basedir 的设置,该配置可以设置你访问目录的权限.根据你 web 服务器环境,open_basedir 可以在几个地方设置.

如何配置

1.在 PHP 配置文件 php.ini 文件中配置

1
;open_basedir =

如果发现该项没有有配置,可以查看一下 fastcgi.conf 文件中是否有如下配置:

1
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root:/tmp/:/proc/:/project_root_path";

project_root_path是配置 PHP 可访问的目录.多个配置时可以使用;隔开(记住一定是英文输入状态下的分好).

2.在自定义的.user.ini 文件中配置

一般情况下是在项目的根目录下面创建该文件,文件的内容可如下配置.

1
open_basedir=/project_root_path:/tmp/:/proc/

project_root_path是项目跟目录的绝对路径.

配置好之后还需要做如下操作才能使该文件生效,在 php.ini 文件中配置如下两个配置项

1
2
user_ini.filename=user.ini
user_ini.cache_ttl=300

配置解释
1 user_ini.filename 配置的.user.ini 文件名称需要和上面自定义的.user.ini 文件名称一致.这样的话,就表示自定义的文件名称并非一定是.user.ini,只要该配置项和文件名称一致即可. 2.关闭掉 php.ini 或者 fastcgi.ini 中的 open_basedir 配置项(直接使用#即可注释).因为该两个文件中的配置项是全局配置.
2.user_ini.cache_ttl 是指的配置生效时间,默认是 300(单位秒).如果想立即生效可以重启 php 服务.

使用效果

这里以 ThinkPHP5.1 的框架为例.环境使用的是 lnmp 集成安装包下载地址.默认安装完环境,我们搭建 ThinkPHP5.1 之后,进行访问会提示 500 错误,这种情况很有可能就是 public 目录下面的.user.ini 文件配置了 open_basedir,只需要将该项注释掉并重启 php 服务即可进行访问了.

1
#open_basedir=/home/wwwroot/thinkphp51/public:/tmp/:/proc/

使用建议

就 PHP 而言,很多框架都实现了防跨目录访问.例如 ThinkPHP3 版本之后的版本,laravel 框架,都将项目的入口文件进行了设置.但为了给项目增加另外一道安全的防火墙,建议添加该配置.
官网参考手册



PHP      原创 PHP 安全

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!