淺談php open_basedir安全與效能的取捨

來源:互聯網
上載者:User
網站的安全與效能似乎是矛與盾的關係。對於一個php網站來說,尤其難以取捨。舉個最簡單的例子:php設定檔的open_basedir將 PHP 所能開啟的檔案限制在指定的分類樹,包括檔案本身。本來這對於網站的安全是十分有利的;但據筆者從網上擷取的資料來看,open_basedir會對php操作io的效能產生很大的影響。研究資料表明,配置了php_basedir的指令碼io執行速度會比沒有配置的慢10倍甚至更多!

起初,我也不太相信這個結果,不過測試資料卻說服我承認這個觀點。

建立一個簡單的指令碼:

<?phpfunctionmicrotime_float(){    list($usec,$sec) =explode(" ", microtime());    return((float)$usec+ (float)$sec);} $time_start= microtime_float(); is_file('1.html'); //判斷目前的目錄是否有1.html這個檔案$time_end= microtime_float();$time=$time_end-$time_start; echo"Did is_file in $time seconds\n";?>

對於open_basedir的測試結果
0.0006 / 5.0E-5
差距是相當大的,不過聰明的朋友應該注意到,筆者的網站配置了open_basedir,相對與這樣的效能損失來說,我寧願選擇犧牲效能,換取安全,您的選擇呢?不用猜,您可能和我的選擇一致啦~畢竟伺服器安全更重要些。

小提示:如何配置open_basedir
當一個指令碼試圖用例如 fopen() 或者 gzopen() 開啟一個檔案時,該檔案的位置將被檢查。當檔案在指定的分類樹之外時 PHP 將拒絕開啟它。所有的符號串連都會被解析,所以不可能通過符號串連來避開此限制。

特殊值 . 指明指令碼的工作目錄將被作為基準目錄。但這有些危險,因為指令碼的工作目錄可以輕易被 chdir() 而改變。

在 httpd.conf 檔案中中,open_basedir 可以像其它任何配置選項一樣用“php_admin_value open_basedir none”的方法關閉(例如某些虛擬機器主機中)。

在 Windows 中,用分號分隔目錄。在任何其它系統中用冒號分隔目錄。作為 Apache 模組時,父目錄中的 open_basedir 路徑自動被繼承。

用 open_basedir 指定的限制實際上是首碼,不是目錄名。也就是說“open_basedir = /dir/incl”也會允許訪問“/dir/include”和“/dir/incls”,如果它們存在的話。如果要將訪問限制在僅為指定的目錄,用斜線結束路徑名。例如:“open_basedir = /dir/incl/”。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.