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 flv视频时间获取函数
Jun 29 PHP
PHP中extract()函数的定义和用法
Aug 17 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
May 12 PHP
浅谈php函数serialize()与unserialize()的使用方法
Aug 19 PHP
php生成html文件方法总结
Dec 01 PHP
浅谈PHP中output_buffering
Jul 13 PHP
PHP中new static()与new self()的比较
Aug 19 PHP
浅谈php(codeigniter)安全性注意事项
Apr 06 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
Oct 14 PHP
laravel5使用freetds连接sql server的方法
Dec 07 PHP
asp函数split()对应php函数explode()
Feb 27 PHP
Laravel + Elasticsearch 实现中文搜索的方法
Feb 02 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
无线电广播的开始
2002/01/30 无线电
消息持续发送的完整例子
2006/10/09 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
JavaScript的面向对象(二)
2006/11/09 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
JS隐藏参数post传值实例
2013/04/18 Javascript
jQuery焦点图切换特效插件封装实例
2013/08/18 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
基于js Canvas实现二次贝塞尔曲线
2018/12/25 Javascript
Easyui 关闭jquery-easui tab标签页前触发事件的解决方法
2019/04/28 jQuery
Elasticsearch实现复合查询高亮结果功能
2019/09/10 Javascript
vue实现点击按钮切换背景颜色的示例代码
2020/06/23 Javascript
Python multiprocessing模块中的Pipe管道使用实例
2015/04/11 Python
python中使用PIL制作并验证图片验证码
2018/03/15 Python
pandas的唯一值、值计数以及成员资格的示例
2018/07/25 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
详解Python在使用JSON时需要注意的编码问题
2019/12/06 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
最新自我评价范文
2013/11/16 职场文书
舞蹈教育学专业推荐信
2013/11/27 职场文书
女儿十岁生日答谢词
2014/01/27 职场文书
会走路的树教学反思
2014/02/20 职场文书
《鹬蚌相争》教学反思
2014/04/22 职场文书
领导干部保密承诺书
2014/08/30 职场文书
委托书格式范文
2015/01/28 职场文书
个人年终总结怎么写
2015/03/09 职场文书
2016银行求职自荐信
2016/01/28 职场文书
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python
前端与RabbitMQ实时消息推送未读消息小红点实现示例
2022/07/23 Java/Android