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 相关文章推荐
使用MaxMind 根据IP地址对访问者定位
Oct 09 PHP
php 中文处理函数集合
Aug 27 PHP
PHP实现多条件查询实例代码
Jul 17 PHP
深入Nginx + PHP 缓存详解
Jul 11 PHP
PHP中include与require使用方法区别详解
Oct 19 PHP
php面向对象中的魔术方法中文说明
Mar 04 PHP
根据ip调用新浪api获取城市名并转成拼音
Mar 07 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
May 10 PHP
php内存缓存实现方法
Jan 24 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
Aug 07 PHP
thinkPHP框架RBAC实现原理分析
Feb 01 PHP
PHP fprintf()函数用法讲解
Feb 16 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实现微信扫码自动登陆与注册功能
2016/09/22 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
轻轻松松学习JavaScript
2007/02/25 Javascript
IE6下opacity与JQuery的奇妙结合
2013/03/01 Javascript
JS特权方法定义作用以及与公有方法的区别
2013/03/18 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
浅析javascript中的DOM
2015/03/01 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
[js高手之路]原型式继承与寄生式继承详解
2017/08/28 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
2020/01/07 Javascript
[03:57]DOTA2英雄梦之声_第03期_幻影刺客
2014/06/21 DOTA
用python实现面向对像的ASP程序实例
2014/11/10 Python
python中的单引号双引号区别知识点总结
2019/06/23 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
Python实现打包成库供别的模块调用
2020/07/13 Python
CSS3实现文字描边的2种方法(小结)
2020/02/14 HTML / CSS
英国最大的在线奢侈手表零售商:Jura Watches
2018/01/29 全球购物
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
2013的个人自我评价
2013/12/26 职场文书
中国梦的演讲稿
2014/01/08 职场文书
给女朋友的道歉信
2014/01/10 职场文书
给老师的道歉信
2014/01/11 职场文书
学校安全生产月活动总结
2014/07/05 职场文书
教师批评与自我批评剖析材料
2014/10/16 职场文书
房屋租赁合同协议书范本
2014/10/19 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书
慰问信格式规范
2015/03/23 职场文书
企业安全生产检查制度
2015/08/06 职场文书
《赵州桥》教学反思
2016/02/17 职场文书