關於php檔案包含目錄配置open_basedir的使用與效能分析

來源:互聯網
上載者:User

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執行以下代碼

<?phpecho 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中文網。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.