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 相关文章推荐
php ftp文件上传函数(基础版)
Jun 03 PHP
php生成随机密码的三种方法小结
Sep 04 PHP
discuz的php防止sql注入函数
Jan 17 PHP
php 冒泡排序 交换排序法
May 10 PHP
php模块memcache和memcached区别分析
Jun 14 PHP
php下利用curl判断远程文件是否存在的实现代码
Oct 08 PHP
php之CodeIgniter学习笔记
Jun 17 PHP
php多文件上传下载示例分享
Feb 20 PHP
简单谈谈PHP中strlen 函数
Feb 27 PHP
PHP strip_tags保留多个HTML标签的方法
May 22 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
May 19 PHP
PHP Swoole异步读取、写入文件操作示例
Oct 24 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
理解PHP5中static和const关键字的区别
2007/03/19 PHP
thinkphp控制器调度使用示例
2014/02/24 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
php经典算法集锦
2015/11/14 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
Js组件的一些写法
2010/09/10 Javascript
JS的replace方法详细介绍
2012/11/09 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
深入浅析vue组件间事件传递
2017/12/29 Javascript
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
MVVM框架下实现分页功能示例
2018/06/14 Javascript
JavaScript 点击触发复制功能实例详解
2018/11/02 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
Python中在for循环中嵌套使用if和else语句的技巧
2016/06/20 Python
pandas数据分组和聚合操作方法
2018/04/11 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
python射线法判断检测点是否位于区域外接矩形内
2019/06/28 Python
简单了解python PEP的一些知识
2019/07/13 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
Napapijri西班牙在线商店:夹克、外套、运动衫等
2020/11/05 全球购物
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
男方父母证婚词
2014/01/12 职场文书
辩论赛主持词
2014/03/18 职场文书
辞旧迎新演讲稿
2014/09/15 职场文书
民政局离婚协议书范本
2014/10/20 职场文书
2014年班级工作总结
2014/11/14 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书
Python django中如何使用restful框架
2021/06/23 Python