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 header()函数使用详细(301、404等错误设置)
Apr 17 PHP
php数组使用规则分析
Feb 27 PHP
ThinkPHP数据操作方法总结
Sep 28 PHP
yii用户注册表单验证实例
Dec 26 PHP
PHP如何将XML转成数组
Apr 04 PHP
ThinkPHP中where()使用方法详解
Apr 19 PHP
CodeIgniter记录错误日志的方法全面总结
May 17 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
Jul 03 PHP
PHP上传文件及图片到七牛的方法
Jul 25 PHP
PHP校验15位和18位身份证号的类封装
Nov 07 PHP
PHP实现简单日历类编写
Aug 28 PHP
PHP 时间处理类Carbon
May 20 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正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
2013/08/13 PHP
DOM XPATH获取img src值的query
2013/09/23 PHP
PHP二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
php+resumablejs实现的分块上传 断点续传功能示例
2017/04/18 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
javascript jscroll模拟html元素滚动条
2012/12/18 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
JavaScript字符串对象substring方法入门实例(用于截取字符串)
2014/10/17 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
jQuery匹配文档链接并添加class的方法
2015/06/26 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
2016/10/21 Javascript
JavaScript设计模式之单例模式详解
2017/06/09 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
Postman模拟发送带token的请求方法
2018/03/31 Javascript
微信小程序实现自定义picker选择器弹窗内容
2020/05/26 Javascript
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
python模拟新浪微博登陆功能(新浪微博爬虫)
2013/12/24 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
微软英国官方网站:Microsoft英国
2016/10/15 全球购物
怎样在程序里获得一个空指针
2015/01/24 面试题
shallow copy和deep copy的区别
2016/05/09 面试题
药品采购员岗位职责
2014/02/08 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
家长给老师的感谢信
2015/01/20 职场文书
2015年学校教育教学工作总结
2015/04/22 职场文书
员工离职通知函
2015/04/25 职场文书
工作感想范文
2015/08/07 职场文书