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
PHP语法速查表
Dec 06 PHP
PHP脚本中include文件出错解决方法
Nov 20 PHP
php adodb连接不同数据库
Mar 19 PHP
apache php模块整合操作指南
Nov 16 PHP
Linux中用PHP判断程序运行状态的2个方法
May 04 PHP
php通过递归方式复制目录和子目录的方法
Mar 13 PHP
PHP实现简单的新闻发布系统实例
Jul 28 PHP
PHP简单判断字符串是否包含另一个字符串的方法
Mar 25 PHP
既简单又安全的PHP验证码 附调用方法
Jun 02 PHP
PHP微信开发之查询微信精选文章
Jun 23 PHP
PHP Cookie学习笔记
Aug 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
PHP如何抛出异常处理错误
2011/03/02 PHP
分享十款最出色的PHP安全开发库中文详细介绍
2015/03/22 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
JS获取DropDownList的value值与text值的示例代码
2014/01/07 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
JavaScript数据类型判定的总结笔记
2015/07/31 Javascript
js实现商城星星评分的效果
2015/12/29 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
JS组件系列之使用HTML标签的data属性初始化JS组件
2016/09/14 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
2016/10/26 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
JavaScript引用类型之基本包装类型实例分析【Boolean、Number和String】
2018/08/09 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
解决vue cli使用typescript后打包巨慢的问题
2019/09/30 Javascript
vue.js实现三级菜单效果
2019/10/19 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
[01:06:32]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第一局
2016/02/28 DOTA
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
Python中的fileinput模块的简单实用示例
2015/07/09 Python
详解Python是如何实现issubclass的
2019/07/24 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
Flask处理Web表单的实现方法
2021/01/31 Python
CSS3中Animation属性的使用详解
2015/08/06 HTML / CSS
策划助理岗位职责
2013/11/18 职场文书
组织关系转移介绍信
2014/01/16 职场文书
2015年度物流工作总结
2015/04/30 职场文书
幼儿园端午节活动总结
2015/05/05 职场文书
离婚起诉状范本
2015/05/19 职场文书
小学语文继续教育研修日志
2015/11/13 职场文书
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python
JavaScript实现登录窗体
2021/06/22 Javascript
Golang jwt身份认证
2022/04/20 Golang
Python pyecharts案例超市4年数据可视化分析
2022/08/14 Python