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
服务器端解压缩zip的脚本
Dec 22 PHP
php数组应用之比较两个时间的相减排序
Aug 18 PHP
用php将任何格式视频转为flv的代码
Sep 03 PHP
php 从数据库提取二进制图片的处理代码
Sep 09 PHP
ThinkPHP 防止表单重复提交的方法
Aug 08 PHP
基于php缓存的详解
May 15 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
Jun 18 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
Dec 09 PHP
实例讲解PHP设计模式编程中的简单工厂模式
Feb 29 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
关于laravel 日志写入失败问题汇总
Oct 17 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
E路文章系统PHP
2006/12/11 PHP
浅析linux下apache服务器的配置和管理
2013/08/10 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
基于jquery的回到页面顶部按钮
2011/06/27 Javascript
Prototype源码浅析 Number部分
2012/01/16 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
jQuery使用zTree插件实现可拖拽的树示例
2017/09/23 jQuery
JavaScript中Object值合并方法详解
2017/12/22 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
详解从Vue-router到html5的pushState
2018/07/21 Javascript
Vue使用localStorage存储数据的方法
2019/05/27 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
2019/11/21 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
对TensorFlow的assign赋值用法详解
2018/07/30 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
Python对象与引用的介绍
2019/01/24 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
RetroStage德国:复古服装
2019/02/03 全球购物
学生自我鉴定模板
2013/12/30 职场文书
数控个人求职信范文
2014/02/03 职场文书
建筑工地质量标语
2014/06/12 职场文书
终止劳动合同通知书
2015/04/16 职场文书
爱国主义电影观后感
2015/06/18 职场文书
母婴行业实体、电商模式全面解析
2019/08/01 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书
pandas中对文本类型数据的处理小结
2021/11/01 Python
详解Python中__new__方法的作用
2022/03/31 Python
基于PyQt5制作一个群发邮件工具
2022/04/08 Python