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

2023-05-16

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性能导致系统执行变慢,因此需要根据具体需求,在安全与性能上做平衡。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php文件包含目录配置open_basedir的使用与性能分析 的相关文章

  • 我如何知道是否启用了 PHP 缓存?

    我曾经认为缓存很难安装 所以我从来没有这样做过 在阅读了有关 APC 的内容后 它似乎很容易安装 我一直认为我必须修改应用程序中的大量 PHP 代码才能使用它 哈哈 不管怎样 我想安装APC 我可以使用 phpinfo 并注意到它没有在页面
  • WooCommerce:在未登录用户的结帐页面中默认设置国家/地区

    如何将国家 地区设为常规 未注册用户 的默认国家 地区 但如果买家有个人账户并进入该国 他在结帐时不会被拖欠吗 我尝试过使用WooCommerce 在结帐页面中默认设置国家 地区 https stackoverflow com questi
  • 根据 WooCommerce 中的订单数量设置折扣

    在WooCommerce中 如何根据订单数量设置折扣 例如 我想根据客户订单应用折扣 首单折扣 50 美元 第二次订购折扣 30 美元 第三次订购折扣10美元 我搜索过互联网但没有找到任何可用的解决方案或插件 Thanks 这是一个挂钩的自
  • 添加和完成 PHP 源代码文档的工具 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有几个已完成的较旧的 PHP 项目 其中有很多内容 我想以 javadoc phpDocumentor
  • 如何获取与 PHP 中的日期数组相比最接近的日期

    这个帖子 https stackoverflow com questions 11012891 how to get most recent date from an array of dates几乎为我回答了这个问题 但我有一个特定的需求
  • 运行 shell 命令并将输出发送到文件?

    我需要能够通过 php 脚本修改我的 openvpn 身份验证文件 我已将我的 http 用户设置为免通 sudoer 因为这台机器仅在我的家庭网络中可用 我目前有以下命令 echo shell exec sudo echo usernam
  • 如何使用 facebook 用户登录我的网站?

    我想知道 facebook 如何让用户登录我们的网站 我的意思是用户需要注册到我的网站才能发表评论 我如何通过我的 php 代码检查它是否是登录用户 我听说你只能用javascript检查它是否是登录用户 感谢您的任何解释 您可以使用脸书
  • Graph API / FQL 不返回页面的所有事件

    脸书页面 http facebook com getwellgabby events http facebook com getwellgabby events 目前有 8 个活动 我能看到他们 非管理员可以看到它们并可以加入它们 但是 当
  • PHP session_destroy() 警告会话对象销毁失败[重复]

    这个问题在这里已经有答案了 我有这个 php 脚本 但在破坏会话时遇到问题 我收到这个警告 警告 session destroy 会话对象销毁失败 第 6 行 C xampp htdocs template nota finalizare
  • drupal 7 将实际内容存储在数据库中的哪里?

    我打开了 drupal 7 的数据库并在表中查找node node revisions and node types并且找不到 drupal 存储实际的位置body节点 内容 的 有人有线索吗 哦 我刚刚找到了 在 D7 中 他们实现了字段
  • 数组到命名变量

    我该如何服用 userarray 这是一个数组 我知道它包含 3 个值 并将它们放入 3 个单独的变量中 而不是循环遍历 那里隔着 commas 所以爆炸会在某个地方发生 Say userfield1 userfield2 userfiel
  • 如何在按钮上执行mysql [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions PHP 单击按钮时如何执行 SQL
  • PHP-向某些浏览器显示消息

    我已经搜索过这个 我发现的一切都超出了我的需要 我以前用 JavaScript 做过这个 但我真的更喜欢使用 PHP 我将如何根据访问者使用的浏览器向他们显示消息 Example IE 用户会看到 您正在使用 Internet Explor
  • laravel 正则表达式验证不起作用

    我刚刚开始使用 laravel 正在努力验证我的表单之一中的文本区域 文本区域用于用户简介 因此我只想允许使用字母 数字 空格和以下字符 这就是我所拥有的 validator Validator make Input all array b
  • https 重定向 laravel .htaccess 之后删除 /public

    我有一个 Laravel 页面部署在共享主机中 当我强制 http 请求重定向到 https 时 url 包含 public 我的根 htaccess 是 RewriteEngine on RewriteCond REQUEST URI p
  • 如何访问带有美元符号的 PHP 对象属性?

    我有一个 PHP 对象 其属性中有一个美元 符号 如何访问该属性的内容 例子 echo object gt variable Ok echo object gt variable WithDollar Syntax error With 变
  • 在同一服务器上的 2 个子域中安装 2 个 WordPress 时共享用户

    我有 2 个 WordPress 网站 位于 2 个不同的子域中 例如test1 abc com and test2 abc com 这两个网站都激活了 wp require 插件 只有登录用户才能看到该网站 我们想要创建一个系统 如果用户
  • 显示带有 id 的内部连接的名称[重复]

    这个问题在这里已经有答案了 我有这个查询 select from countrysegments inner join country on countrysegments country id country id inner join
  • 我可以在 php 中的 SESSION 数组上使用 array_push 吗?

    我有一个想要在多个页面上使用的数组 因此我将其设为 SESSION 数组 我想添加一系列名称 然后在另一个页面上 我希望能够使用 foreach 循环来回显该数组中的所有名称 这是会议 SESSION names 我想使用 array pu
  • snappy wkhtmltopdf 包装器将生成的 html 文件发送到浏览器

    我像鼹鼠一样用谷歌搜索 但找不到正确的方法 我正在使用 WKHTMLTOPDF Wrapper Snappy 创建 PDF 如何将使用generateFromHtml方法生成的pdf直接发送到浏览器 这就是我想做的 header Conte

随机推荐

  • MongoDB 导出导入备份恢复数据实例

    创建测试数据 创建db testdb collection user 插入10条记录 mongo MongoDB shell span class hljs property version span span class hljs num
  • crontab 使用日期时间命名重定向文件

    linux crontab命令可以实现定时执行任务 xff0c 最小的执行周期是1分钟 关于crontab的使用可以查看 Linux crontab定时执行任务 命令格式与详细例子 例 xff1a 每天12点执行test php xff0c
  • php 使用redis锁限制并发访问类

    1 并发访问限制问题 对于一些需要限制同一个用户并发访问的场景 xff0c 如果用户并发请求多次 xff0c 而服务器处理没有加锁限制 xff0c 用户则可以多次请求成功 例如换领优惠券 xff0c 如果用户同一时间并发提交换领码 xff0
  • mysql导入大批量数据出现MySQL server has gone away的解决方法

    因工作需要 xff0c 需要导入一个200M左右的sql到user库 执行命令 mysql gt use user Database changed mysql gt span class hljs built in source span
  • mysql 搜寻附近N公里内数据的实例

    根据圆周率和地球半径系数以及搜寻点的经纬度 xff0c 搜寻数据表中与搜寻点之间的距离为N公里内的数据 1 创建测试表 span class hljs operator span class hljs keyword CREATE span
  • crontab 精确到执行分钟内某一秒执行的方法

    linux crontab命令可以实现定时执行任务 xff0c 最小的执行周期是1分钟 关于crontab的使用可以查看 Linux crontab定时执行任务 命令格式与详细例子 执行指定命令默认是当前执行分钟的第0 1秒开始 例如 xf
  • mongodb 随机获取一条记录的方法

    原理 xff1a 1 先查询表中的记录总数 2 随机获取偏移量为0 总记录数 1 3 查询时skip偏移量 xff0c 再获取1条记录 因本人测试环境php已升级到7 0以上 xff0c mongodb扩展使用支持php7 0以上的扩展 x
  • mysql 连接闪断自动重连的方法

    使用php作为后台运行程序 xff08 例如短信群发 xff09 xff0c 在cli模式下执行php xff0c php需要连接mysql循环执行数据库处理 当mysql连接闪断时 xff0c 之后循环的执行将会失败 我们需要设计一个方法
  • mongodb 判断坐标是否在指定多边形区域内的方法

    MongoDB是一个基于分布式文件存储的数据库 xff0c 并提供创建基于地理空间的索引的能力 xff0c 本文将使用MongoDB 基于地理空间索引进行坐标所在区域的判断及使用 1 使用百度拾取坐标工具 xff0c 在地图上定义多边形的坐
  • php 实现HTML实体编号与非ASCII字符串相互转换类

    HTML实体符号被用作实现保留字符 xff08 reserved characters xff09 或者表达键盘无法输入的一些常用字符 在大多数浏览器中默认的字符集为ISO 8859 1 HTML实体符号我们在网页设计中经常用到 例如 xf
  • 阿里云RAM账户日常问题总结

    什么是RAM RAM Resource Access Management 是阿里云为客户提供的用户身份管理与访问控制服务 使用RAM xff0c 您可以创建 管理用户账号 xff08 比如员工 系统或应用程序 xff09 xff0c 并可
  • mysql 出现You can't specify target table for update in FROM clause错误的解决方法

    mysql出现You can t specify target table for update in FROM clause 这个错误的意思是不能在同一个sql语句中 xff0c 先select同一个表的某些值 xff0c 然后再upda
  • php结合mongodb判断坐标是否在指定多边形区域内的实例

    之前写过一篇 mongodb 判断坐标是否在指定多边形区域内的方法 是基于mongodb实现 xff0c 所有操作都是在mongodb执行 这次提供使用php连接mongodb xff0c 判断坐标是否在指定多边形区域内的实例 1 定义多边
  • php ID前缀格式化类

    数据库表通常都会有一个字段类型为int 命名为id的自增主键 优点 xff1a 使用int类型可自增 xff0c 且比字符类型节省存储空间 缺点 xff1a id是数值型 xff0c 当要查询一个id对应的数据时 xff0c 很难根据id判
  • php 将print_r处理后的数据还原为原始数组的方法

    php print r方法可以把变量打印显示 xff0c 使变量易于理解 如果变量是string integer或float xff0c 将打印变量值本身 xff0c 如果变量是array xff0c 将会按照一定格式显示键和元素 obje
  • php PDO判断连接是否可用的方法

    mysql ping 检查到服务器的连接是否正常 如果到服务器的连接可用 xff0c 则返回true xff0c 否则返回false 但PDO不支持mysql ping 方法 xff0c 因此需要自己编写代码模拟mysql ping 方法
  • HTML5获取当前地理位置并在百度地图上展示的实例

    1 HTML5获取当前地理位置 HTML5 Geolocation API xff08 地理位置应用程序接口 xff09 可以获取当前地理位置 xff0c 手机端使用GPS xff0c 电脑则根据网络定位 检查浏览器是否支持HTML5 Ge
  • php 根据自增id创建唯一编号类

    在开发过程中 xff0c 我们数据表一般都使用自增数字作为id主键 xff0c 而id是数字型 xff0c 不容易理解 我们把id按一定格式转为编号后 xff0c 很容易根据编号知道代表的是什么内容 例如订单表id 61 201601111
  • mysql 判断点是否在指定多边形区域内

    本文将介绍使用mysql判断点是否在指定多边形区域内的方法 xff0c 提供完整流程 1 创建测试表 span class hljs operator span class hljs keyword CREATE span span cla
  • php文件包含目录配置open_basedir的使用与性能分析

    1 open basedir介绍 open basedir 将php所能打开的文件限制在指定的目录树中 xff0c 包括文件本身 当程序要使用例如fopen 或file get contents 打开一个文件时 xff0c 这个文件的位置将