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 相关文章推荐
PhpMyAdmin中无法导入sql文件的解决办法
Jan 08 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
Nov 02 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
Oct 25 PHP
PHP中echo和print的区别
Aug 28 PHP
跟我学Laravel之快速入门
Oct 15 PHP
WordPress中自定义后台管理界面配色方案的小技巧
Dec 29 PHP
Linux php 中文乱码的快速解决方法
May 13 PHP
PHP Class SoapClient not found解决方法
Jan 20 PHP
PHP内置函数生成随机数实例
Jan 18 PHP
PHP7 mongoDB扩展使用的方法分享
May 02 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 PHP
PHP数组Key强制类型转换实现原理解析
Sep 01 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设计聊天室步步通
2006/10/09 PHP
PHP+MySQL 手工注入语句大全 推荐
2009/10/30 PHP
PHP IF ELSE简化/三元一次式的使用
2011/08/22 PHP
JpGraph php柱状图使用介绍
2011/08/23 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
php获取目标函数执行时间示例
2014/03/04 PHP
JavaScript 继承详解(四)
2009/07/13 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
jQuery使用ajax跨域获取数据的简单实例
2016/05/18 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
2016/06/23 Javascript
JS获取当前页面名称的简单实例
2016/08/19 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
微信小程序template模板与component组件的区别和使用详解
2019/05/22 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
layui表格分页 记录勾选的实例
2019/09/02 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
python批量导出导入MySQL用户的方法
2013/11/15 Python
Python选课系统开发程序
2016/09/02 Python
浅谈python中的变量默认是什么类型
2016/09/11 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
使用Selenium破解新浪微博的四宫格验证码
2018/10/19 Python
python实现多层感知器
2019/01/18 Python
Python之NumPy(axis=0 与axis=1)区分详解
2019/05/27 Python
python opencv调用笔记本摄像头
2019/08/28 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
现代绅士日常奢侈品:Todd Snyder
2019/12/13 全球购物
企事业单位求职者的自我评价
2013/12/28 职场文书
课堂教学改革实施方案
2014/03/17 职场文书
三八活动策划方案
2014/08/17 职场文书
中学社团活动总结
2015/05/07 职场文书
关于环保的广播稿
2015/12/17 职场文书
2016大学生暑期社会实践心得体会
2016/01/14 职场文书
八年级作文之感恩
2019/11/22 职场文书