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 相关文章推荐
模拟OICQ的实现思路和核心程序(二)
Oct 09 PHP
一个ubbcode的函数,速度很快.
Oct 09 PHP
PHP中“简单工厂模式”实例代码讲解
Sep 04 PHP
php实现自动获取生成文章主题关键词功能的深入分析
Jun 03 PHP
探讨php中遍历二维数组的几种方法详解
Jun 08 PHP
php CI框架插入一条或多条sql记录示例
Jul 29 PHP
基于php实现七牛抓取远程图片
Dec 01 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
May 06 PHP
yii2分页之实现跳转到具体某页的实例代码
Jun 02 PHP
PHP生成制作验证码的简单实例
Jun 12 PHP
php实现将数据做成json的格式给前端使用
Aug 21 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
Mar 23 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
MYSQL 小技巧 -- LAST_INSERT_ID
2009/11/24 PHP
php写的简易聊天室代码
2011/06/04 PHP
360通用php防护代码(使用操作详解)
2013/06/18 PHP
PHP中使用hidef扩展代替define提高性能
2015/04/09 PHP
CodeIgniter读写分离实现方法详解
2016/01/20 PHP
php函数式编程简单示例
2019/08/08 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
jscript之Open an Excel Spreadsheet
2007/06/13 Javascript
jQuery TextBox自动完成条
2009/07/22 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
2015/06/05 Javascript
JS中数组重排序方法
2016/11/11 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
jQuery插件扩展操作入门示例
2017/01/16 Javascript
详解node.js 下载图片的 2 种方式
2018/03/02 Javascript
关于vue中的ajax请求和axios包问题
2018/04/19 Javascript
IE9 elementUI文件上传的问题解决
2018/10/17 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
JS如何在数组指定位置插入元素
2020/03/10 Javascript
python opencv之分水岭算法示例
2018/02/24 Python
python中正则表达式的使用方法
2018/02/25 Python
Python----数据预处理代码实例
2019/03/20 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
2020/03/03 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
长安大学毕业生自我鉴定
2014/01/17 职场文书
城管大队整治方案
2014/05/06 职场文书
团委工作总结2015
2015/04/02 职场文书
离婚起诉状范本
2015/05/19 职场文书
《认识年月日》教学反思
2016/02/19 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
css3新特性的应用示例分析
2022/03/16 HTML / CSS