open_basedir 将PHP所能打开的文件限制在指定的目录树中,包括文件本身。当程序要使用例如fopen()或file_get_contents()打开一个文件时,这个文件的位置将会被检查。当文件在指定的目录树之外,程序将拒绝打开。本指令不受安全模式打开或关闭的影响。
open_basedir = .:/tmp/
这个设置表示允许访问当前目录(即PHP脚本文件所在之目录)和/tmp/目录,有效防止php木马跨站运行。
在Apache服务器中,切忌一定要在虚拟主机配置文件中添加以下代码,否则PHP木马脚本可以浏览你服务器上的任意文件,这意味着你的服务器很快会被攻破。
open_basedir 的几种这是方法:
1.在php.ini 配置 添加代码如下:
open_basedir="指定目录"; eg: open_dir="/usr/local/apache/htdocs/www/:/tmp/"
注意:把/usr/local/apache/htdocs/www/替换成你自己的网站目录
2.在程序中设置 添加代码如下:
ini_set('open_basedir','指定目录'); * 不建议使用此方法
3.在apache的httpd.conf的Directory配置 或者 httpd.conf中的VirtualHost 配置
php_admin_value open_basedir "指定目录"
需要注意的是:
因为/etc/httpd/conf.d/vhost.conf中设置了open_basedir之后, 虚拟用户就不会再自动继承php.ini中的open_basedir设置值了,这就难以达到灵活的配置措施, 所以建议您不要在/etc/httpd/conf.d/vhost.conf中设置此项限制。可以在php.ini中设置open_basedir = .:/tmp/
例如:
编辑虚拟主机配置文件
vi /etc/httpd/conf.d/vhost.conf
在你的网站配置中添加下面的代码
php_admin_value open_basedir "/usr/local/apache/htdocs/www/:/tmp/"
4.nginx fastcgi.conf
fastcgi_param PHP_VALUE "open_basedir=指定目录"
用open_basedir指定的限制实际上是前缀,不是目录名。也就是说 open_basedir=/home/fdipzone 也会允许访问/home/fdipzone_abc,如果要将访问限制为目录,请使用斜线结束路径名,例如:open_basedir=”/home/fdipzone/”如果要设置多个目录,window使用;分隔目录,Linux使用:分隔目录。
热门文章