php文件包含目录配置open_basedir的使用与性能详解


Posted in PHP onApril 03, 2017

1.open_basedir介绍

open_basedir 将php所能打开的文件限制在指定的目录树中,包括文件本身。当程序要使用例如fopen()或file_get_contents()打开一个文件时,这个文件的位置将会被检查。当文件在指定的目录树之外,程序将拒绝打开。

本指令不受安全模式打开或关闭的影响。

2.open_basedir设置方法

1.在php.ini 加入

open_basedir="指定目录"

2.在程序中使用

ini_set('open_basedir', '指定目录');

但不建议使用这种方法

3.在apache的httpd.conf中的Directory配置

php_admin_value open_basedir "指定目录"
httpd.conf中的VritualHost

php_admin_value open_basedir "指定目录"

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使用:分隔目录。

3.使用open_basedir限制目录访问

首先创建一个VirtualHost,

设置open_basedir 为/home/fdipzone/sites/in.fdipzone.com/

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  DocumentRoot /home/fdipzone/sites/in.fdipzone.com
  ServerName in.fdipzone.com
  php_admin_value open_basedir "/home/fdipzone/sites/in.fdipzone.com/"
  <Directory "/home/fdipzone/sites/in.fdipzone.com">
    allow from all Options + Indexes
  </Directory>
</VirtualHost>

在上一层目录 /home/fdipzone/sites/ 中创建一个test.txt文件,在in.fdipzone.com中创建php执行以下代码

<?php
echo file_get_contents('../test.txt');
?>

因为test.txt不在限定的目录范围内,因此php提示警告

Warning: file_get_contents(): open_basedir restriction in effect. File(../test.txt) is not within the allowed path(s): (/home/fdipzone/sites/in.fdipzone.com/) in /home/fdipzone/sites/in.fdipzone.com/index.php on line 3

4.设置open_basedir的性能分析

open_basedir开启后会影响I/O,因为每个调用的文件都需要判断是否在限制目录内。

测试程序,读取限制目录内同一文件10000次

<?php
// 记录开始时间
$starttime = getMicrotime();

// 读取10000次文件
for($i=0; $i<10000; $i++){
  file_get_contents('test.txt');
}

// 记录结束时间
$endtime = getMicrotime();

printf("run time %f ms\r\n", ((float)($endtime)-(float)($starttime))*1000);

function getMicrotime(){
  list($usec, $sec) = explode(' ', microtime());
  return (float)$usec + (float)$sec;
}
?>

关闭open_basedir测试

run time 137.237072 ms

打开open_basedir测试

run time 404.207945 ms

开启open_basedir后,执行时间是关闭的3倍。

总结:使用open_basedir可以限制程序可操作的目录和文件,提高系统安全性。但会影响I/O性能导致系统执行变慢,因此需要根据具体需求,在安全与性能上做平衡。

以上这篇php文件包含目录配置open_basedir的使用与性能详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
操作Oracle的php类
Oct 09 PHP
针对初学PHP者的疑难问答(1)
Oct 09 PHP
php Memcache 中实现消息队列
Nov 24 PHP
PHP中=赋值操作符对不同数据类型的不同行为
Jan 02 PHP
eAccelerator的安装与使用详解
Jun 13 PHP
php unset全局变量运用问题的深入解析
Jun 17 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
Dec 16 PHP
Yii中实现处理前后台登录的新方法
Dec 28 PHP
php compact 通过变量创建数组
Nov 15 PHP
PHP中Laravel 关联查询返回错误id的解决方法
Apr 01 PHP
PHP中file_put_contents追加和换行的实现方法
Apr 01 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
thinkphp关于简单的权限判定方法
Apr 03 #PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
Apr 01 #PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
Apr 01 #PHP
thinkphp自定义权限管理之名称判断方法
Apr 01 #PHP
浅谈ThinkPHP中initialize和construct的区别
Apr 01 #PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 #PHP
PHP中file_put_contents追加和换行的实现方法
Apr 01 #PHP
You might like
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
2011/07/17 PHP
PHP中soap的用法实例
2014/10/24 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
2017/05/29 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
Firefox+FireBug使JQuery的学习更加轻松愉快
2010/01/01 Javascript
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
2011/07/10 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
NodeJS学习笔记之网络编程
2014/08/03 NodeJs
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
js实现动态加载脚本的方法实例汇总
2015/11/02 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
利用Javascript实现一套自定义事件机制
2017/12/14 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
详解Vue内部怎样处理props选项的多种写法
2018/11/06 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
[01:18:36]LGD vs VP Supermajor 败者组决赛 BO3 第一场 6.10
2018/07/04 DOTA
Python使用PyCrypto实现AES加密功能示例
2017/05/22 Python
用python实现将数组元素按从小到大的顺序排列方法
2018/07/02 Python
python 变量初始化空列表的例子
2019/11/28 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
python 下载文件的几种方法汇总
2021/01/06 Python
关于VPN
2012/06/10 面试题
《雷鸣电闪波尔卡》教学反思
2014/02/23 职场文书
《美丽的黄昏》教学反思
2014/02/28 职场文书
信息服务专业毕业生求职信
2014/03/02 职场文书
检讨书模板大全
2015/05/07 职场文书
超级详细实用的pycharm常用快捷键
2021/05/12 Python
使用CSS实现一个搜索引擎的原理解析
2021/09/25 HTML / CSS
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers