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 相关文章推荐
将数字格式的计算结果转为汉字格式
Oct 09 PHP
深入PHP数据加密详解
Jun 18 PHP
分享一个php 的异常处理程序
Jun 22 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
Nov 19 PHP
PHP图像处理类库MagickWand用法实例分析
May 21 PHP
PHP实现多文件上传的方法
Jul 08 PHP
php数据访问之查询关键字
May 09 PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
Mar 24 PHP
Yii2实现ActiveForm ajax提交
May 26 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
php封装的pdo数据库操作工具类与用法示例
May 08 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
Zend的MVC机制使用分析(二)
2013/05/02 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
繁简字转换功能
2006/07/19 Javascript
javascript实现动态增加删除表格行(兼容IE/FF)
2007/04/02 Javascript
一个可以兼容IE FF的加为首页与加入收藏实现代码
2009/11/02 Javascript
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
jquery动态加载select下拉框示例代码
2013/12/10 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
2014/06/09 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
jQuery鼠标事件总结
2016/10/13 Javascript
Ajax基础知识详解
2017/02/17 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
JS实现图片转换成base64的各种应用场景实例分析
2018/06/22 Javascript
Element-UI中Upload上传文件前端缓存处理示例
2019/02/21 Javascript
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
javascript实现前端成语点击验证优化
2020/06/24 Javascript
JavaScript实现手风琴效果
2021/02/18 Javascript
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
对python3新增的byte类型详解
2018/12/04 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
python matplotlib库的基本使用
2020/09/23 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
你可能不熟练的十个前端HTML5经典面试题
2018/07/03 HTML / CSS
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
继电保护工岗位职责
2014/01/05 职场文书
捐款倡议书
2014/04/14 职场文书
英语故事演讲稿
2014/04/29 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
焦裕禄观后感
2015/06/03 职场文书
禁毒心得体会范文
2016/01/15 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
2021/04/24 Python