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输出控制功能在简繁体转换中的应用
Oct 09 PHP
关于文本留言本的分页代码
Oct 09 PHP
smarty+adodb+部分自定义类的php开发模式
Dec 31 PHP
ecshop 批量上传(加入自定义属性)
Mar 20 PHP
探讨:php中在foreach中使用foreach ($arr as &amp;$value) 这种类型的解释
Jun 24 PHP
memcache命令启动参数中文解释
Jan 13 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
Oct 24 PHP
php如何获取文件的扩展名
Oct 28 PHP
对比分析php中Cookie与Session的异同
Feb 19 PHP
php 变量引用与变量销毁机制详细介绍
Dec 05 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
Sep 01 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
Jul 09 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获取随机数字和字母的方法详解
2013/06/06 PHP
javascritp实现input输入框相关限制用法
2007/06/29 Javascript
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
jQuery 特性操作详解及实例代码
2016/09/29 Javascript
微信小程序 slider 详解及实例代码
2017/01/10 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
2017/03/11 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
在Vue项目中取消ESLint代码检测的步骤讲解
2019/01/27 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
JavaScript 装逼指南(js另类写法)
2020/05/10 Javascript
[57:59]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第一场 11.05
2020/11/05 DOTA
python局部赋值的规则
2013/03/07 Python
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
HTML5中的nav标签学习笔记
2016/06/24 HTML / CSS
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
vue+django实现下载文件的示例
2021/03/24 Vue.js
医院辞职信范文
2014/01/17 职场文书
八年级数学教学反思
2014/01/31 职场文书
创建市级文明单位实施方案
2014/03/01 职场文书
班主任寄语大全
2014/04/04 职场文书
如何写求职信
2014/05/24 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
2016年3月份红领巾广播稿
2015/12/21 职场文书
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫