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中文字符截取防乱码
Mar 28 PHP
php后台程序与Javascript的两种交互方式
Oct 25 PHP
PHP5中使用DOM控制XML实现代码
May 07 PHP
php使用mkdir创建多级目录入门例子
May 10 PHP
php的XML文件解释类应用实例
Sep 22 PHP
php获取根域名方法汇总
Oct 28 PHP
PHP自定session保存路径及删除、注销与写入的方法
Nov 18 PHP
ThinkPHP实现递归无级分类――代码少
Jul 29 PHP
Yii视图CGridView列表用法实例分析
Jul 12 PHP
php 微信公众平台开发模式实现多客服的实例代码
Nov 07 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
Mar 10 PHP
yii2.0框架场景的简单使用示例
Jan 25 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/17 PHP
PHP字符串的连接的简单实例
2013/12/30 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
在父页面调用子页面的JS方法
2013/09/29 Javascript
js中哈希表的几种用法总结
2014/01/28 Javascript
jquery列表拖动排列(由项目提取相当好用)
2014/06/17 Javascript
用C/C++来实现 Node.js 的模块(一)
2014/09/24 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
JavaScript汉诺塔问题解决方法
2015/04/21 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
jQuery解析XML 详解及方法总结
2016/09/28 Javascript
jQuery操作json常用方法示例
2017/01/04 Javascript
AngularJS实现的生成随机数与猜数字大小功能示例
2017/12/25 Javascript
angularJs利用$scope处理升降序的方法
2018/10/08 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
浅析JavaScript预编译和暗示全局变量
2020/09/03 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
2016/07/02 Python
python实现Windows电脑定时关机
2018/06/20 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
详解pandas安装若干异常及解决方案总结
2019/01/10 Python
python使用原始套接字发送二层包(链路层帧)的方法
2019/07/22 Python
Python如何实现的二分查找算法
2020/05/27 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
护理个人求职信范文
2014/01/08 职场文书
学校万圣节活动方案
2014/02/13 职场文书
安全环保标语
2014/06/09 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书
六年级作文之自救
2019/12/19 职场文书
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫
win10滚动条自动往上跑怎么办?win10滚动条自动往上跑的解决方法
2022/08/05 数码科技