網(wǎng)站的安全與性能似乎是矛與盾的關(guān)系。對(duì)于一個(gè)php網(wǎng)站來說,尤其難以取舍。舉個(gè)最簡(jiǎn)單的例子:php配置文件的open_basedir將 PHP 所能打開的文件限制在指定的目錄樹,包括文件本身。本來這對(duì)于網(wǎng)站的安全是十分有利的;但據(jù)筆者從網(wǎng)上獲取的資料來看,open_basedir會(huì)對(duì)php操作io的性能產(chǎn)生很大的影響。研究資料表明,配置了php_basedir的腳本io執(zhí)行速度會(huì)比沒有配置的慢10倍甚至更多!
起初,我也不太相信這個(gè)結(jié)果,不過測(cè)試數(shù)據(jù)卻說服我承認(rèn)這個(gè)觀點(diǎn)。
創(chuàng)建一個(gè)簡(jiǎn)單的腳本:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?php
functionmicrotime_float()
{
list($usec,$sec) =explode(" ", microtime());
return((float)$usec+ (float)$sec);
}
$time_start= microtime_float();
is_file('1.html'); //判斷當(dāng)前目錄是否有1.html這個(gè)文件
$time_end= microtime_float();
$time=$time_end-$time_start;
echo"Did is_file in $time seconds\n";
?>
|
對(duì)于open_basedir的測(cè)試結(jié)果
0.0006 / 5.0E-5
差距是相當(dāng)大的,不過聰明的朋友應(yīng)該注意到,筆者的網(wǎng)站配置了open_basedir,相對(duì)與這樣的性能損失來說,我寧愿選擇犧牲性能,換取安全,您的選擇呢?不用猜,您可能和我的選擇一致啦~畢竟服務(wù)器安全更重要些。
小提示:如何配置open_basedir
當(dāng)一個(gè)腳本試圖用例如 fopen() 或者 gzopen() 打開一個(gè)文件時(shí),該文件的位置將被檢查。當(dāng)文件在指定的目錄樹之外時(shí) PHP 將拒絕打開它。所有的符號(hào)連接都會(huì)被解析,所以不可能通過符號(hào)連接來避開此限制。
特殊值 . 指明腳本的工作目錄將被作為基準(zhǔn)目錄。但這有些危險(xiǎn),因?yàn)槟_本的工作目錄可以輕易被 chdir() 而改變。
在 httpd.conf 文件中中,open_basedir 可以像其它任何配置選項(xiàng)一樣用“php_admin_value open_basedir none”的方法關(guān)閉(例如某些虛擬主機(jī)中)。
在 Windows 中,用分號(hào)分隔目錄。在任何其它系統(tǒng)中用冒號(hào)分隔目錄。作為 Apache 模塊時(shí),父目錄中的 open_basedir 路徑自動(dòng)被繼承。
用 open_basedir 指定的限制實(shí)際上是前綴,不是目錄名。也就是說“open_basedir = /dir/incl”也會(huì)允許訪問“/dir/include”和“/dir/incls”,如果它們存在的話。如果要將訪問限制在僅為指定的目錄,用斜線結(jié)束路徑名。例如:“open_basedir = /dir/incl/”。
轉(zhuǎn)載請(qǐng)注明來源:淺談php open_basedir安全與性能的取舍哈爾濱品用軟件有限公司致力于為哈爾濱的中小企業(yè)制作大氣、美觀的優(yōu)秀網(wǎng)站,并且能夠搭建符合百度排名規(guī)范的網(wǎng)站基底,使您的網(wǎng)站無需額外費(fèi)用,即可穩(wěn)步提升排名至首頁。歡迎體驗(yàn)最佳的哈爾濱網(wǎng)站建設(shè)。
