php文件包含目录配置open_basedir的使用与性能详解

 更新时间:2017年04月03日 09:39:19   投稿:jingxian  
下面小编就为大家带来一篇php文件包含目录配置open_basedir的使用与性能详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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的使用与性能详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySql数据库查询结果用表格输出PHP代码示例

    MySql数据库查询结果用表格输出PHP代码示例

    这篇文章主要介绍了MySql数据库查询结果用表格输出PHP代码示例,本文直接给出代码示例,需要的朋友可以参考下
    2015-03-03
  • Thinkphp5和Thinkphp3的区别对比以及单字母函数对应的助手函数

    Thinkphp5和Thinkphp3的区别对比以及单字母函数对应的助手函数

    TP5在很多方面相比TP3升级和提升。尽管TP3已经有一定的市场和用户群体,但新项目还是建议使用TP5。thinkphp3.2中一些快捷大写单字母函数,比如 U(),I() , C(),M() , D() , W()等,这些在thinkphp5 中已经不再使用,而是改用助手函数来代替。
    2023-07-07
  • php mssql扩展SQL查询中文字段名解决方法

    php mssql扩展SQL查询中文字段名解决方法

    问题就出现在SQLServer中表的字段名是中文,写好的查询语句在SQLServe里测试是通过有记录返回,用PHP的MSSQL扩展查询就是报错
    2012-10-10
  • Yii中render和renderPartial的区别

    Yii中render和renderPartial的区别

    这篇文章主要介绍了Yii中render和renderPartial的区别,以下由我们在信易网络公司开发项目的时候终结出的一些经验
    2014-09-09
  • php生成网页桌面快捷方式

    php生成网页桌面快捷方式

    本文将介绍使用PHP生成网页桌面快捷方式的代码,并添加图标及解决不同浏览器保存出现的乱码问题。下面跟着小编一起来看下吧
    2017-05-05
  • php 攻击方法之谈php+mysql注射语句构造

    php 攻击方法之谈php+mysql注射语句构造

    由于PHP和MYSQL本身得原因,PHP+MYSQL的注射要比asp困难,尤其是注射时语句的构造方面更是个难点,本文主要是借对Okphp BBS v1.3一些文件得简单分析,来谈谈php+mysql注射语句构造方式,希望本文对你有点帮助。
    2009-10-10
  • 两级联动select刷新后其值保持不变的实现方法

    两级联动select刷新后其值保持不变的实现方法

    两级联动select刷新后,select值保持不变即点击提交按钮后,页面select中继续维持提交前的值,下面有个不错的示例,大家可以参考下
    2014-01-01
  • php实现XSS安全过滤的方法

    php实现XSS安全过滤的方法

    这篇文章主要介绍了php实现XSS安全过滤的方法,实例分析了php针对XSS进行安全过滤的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • PHP中余数、取余的妙用

    PHP中余数、取余的妙用

    这篇文章主要介绍了PHP中余数、取余的妙用,这个是在WEB开发中一个经常使用的小技巧,不管是在表格、ul、li或者是换行等HTML处理中,需要隔几行换行,隔几行加入ul或li的结束标记等时候,特别的有用,需要的朋友可以参考下
    2015-06-06
  • PHP中$_SERVER的详细参数与说明介绍

    PHP中$_SERVER的详细参数与说明介绍

    PHP编程中经常需要用到一些服务器的一些资料,特把$_SERVER的详细参数整理下,方便以后使用
    2013-10-10

最新评论