解讀php.ini的基本概念和配置方法
我們在學(xué)習PHP語言的時候也許對php.ini的相關(guān)知識還是比較陌生。那么今天我們就為新手們詳細解讀php.ini的基本概念還頂級配置方法,方便我們學(xué)習PHP語言。我們首先來了解一些php.ini的基本概念性。空白字符和以分號開始的行被簡單地忽略。設(shè)置指令的格式如下:directive = value 指令名(directive)是大小寫敏感的!所以”foo=bar”不同于”FOO=bar”。值(value)可以是:
#t#1. 用引號界定的字符串(如:”foo”)
2. 一個數(shù)字(整數(shù)或浮點數(shù),如:0,1,34,-1,33.55)
3. 一個PHP常量(如:E_ALL,M_PI)
4. 一個INI常量(On,Off,none)
5. 一個表達式(如:E_ALL & ~E_NOTICE)
還有另外一個是設(shè)置布爾值,1為On就是開啟,0為Off就是關(guān)閉。php.ini分了很多部分,例如:模塊部分,PHP全局配置,數(shù)據(jù)庫配置,等等。了解了基本的概念以后我們就可以開始變態(tài)配置之旅。
第一個重要的參數(shù)是register_globals. 這個配置影響到PHP如何接收傳遞過來的參數(shù),說白了register_globals的意思就是注冊為全局變量,所以當該參數(shù)為值On的時候,傳遞過來 的值會被直接的注冊為全局變量直接使用,而當該參數(shù)值為Off的時候,我們需要到從特定的數(shù)組里去得到它。從www.milw0rm.com很多的PHP漏洞來看一大部分是因為Register_Globals為On的時候被利用的,所以強烈推薦將這個參數(shù)修改成Off,PHP目前的最高版中此參數(shù)都是默 認是Off的,沒啥說的了,如果你用的版本比較老的話一定要修改這里。
第二個重要的參數(shù)是magic_quotes_gpc。如果你把magic_quotes_gpc設(shè)置成了Off,那么PHP就不會對4種字符 ‘ (單引號), ” (雙引號), (反斜線) 和 空字符進行轉(zhuǎn)義,那這樣的話就會造成服務(wù)器可能會被非法注入的可能。但是如果你把Magic_quotes_gpc設(shè)置成On的話,PHP就會 給$_POST,$_GET,$_COOKIE提交的變量中如果有上面四種字符的話就會加上反斜扛.這樣就會大大地提高PHP的安全性。強烈推薦將 Magic_quotes_gpc設(shè)置為On。
第三個比較重要的是display_errors。為什么說這個參數(shù)重要呢,因為沒有不會犯錯誤的開發(fā)者,PHP的 display_errors參數(shù)就是幫助開發(fā)者定位和確定這些錯誤的??墒侨绻鸓HP提供的這些信息被黑客了解到的話,這就不妙了。比如某國庫的網(wǎng)站,因為對display_errors沒有進行設(shè)置,導(dǎo)致web目錄泄露。這對于黑客來說可是非常重要的信息,因為很多時候的滲透都需要知道web 目錄,例如webshell的寫入等等。所以我們強烈推薦大家把這個參數(shù)設(shè)置成Off。
第四個重要的參數(shù)就是safe_mode,就是我們常說的安全模式。PHP的安全模式是個非常重要的內(nèi)嵌的安全機制,能夠控制一些PHP中的函 數(shù),比如system()等函數(shù),同時把很多文件操作函數(shù)進行了權(quán)限控制,也不允許對某些關(guān)鍵文件的訪問,比如/etc/passwd,但是默認的 php.ini是沒有打開安全模式的,我們把它打開。safe_mode = on。
第五個參數(shù)是open_basedir,使用open_basedir選項能夠控制PHP腳本只能訪問指定的目錄,這樣能夠避免PHP腳本訪問 不應(yīng)該訪問的文件,一定程度上限制了webshell的危害,我們一般可以設(shè)置為只能訪問網(wǎng)站目錄(假設(shè)網(wǎng)站目錄為 E:test):open_basedir = E:test 第六個參數(shù)是disable_functions,使用disable_functions可以限制一些對于系統(tǒng)來說威脅很大的函數(shù)。
例如,我們在第一部分中看到的有PHPinfo()函數(shù)的網(wǎng)頁中可以看到關(guān)于PHP的環(huán)境變量等。還有可以利用system,exec等函數(shù)來 執(zhí)行系統(tǒng)命令等等。這里我們推薦過濾的函數(shù)如下。disable_functions = PHPinfo,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,
proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,
popepassthru,stream_socket_server。 大家如果對某個函數(shù)不了解的話,可以google搜索得到函數(shù)的作用,然后來決定您自己的服務(wù)器是否禁止掉。
第七個參數(shù)是Com組件。Windows平臺下的PHP腳本平臺存在一個安全漏洞,使得PHP設(shè)置即使在安全模式下(safe_mode),仍 舊允許攻擊者使用COM()函數(shù)來創(chuàng)建系統(tǒng)組件來執(zhí)行任意命令。漏洞出現(xiàn)的原因是由于在安全模式下的PHP平臺雖然system();pathru()函 數(shù)被禁止,但是com.allow_dcom的設(shè)置依舊是為true。以至于攻擊者可以使用COM()函數(shù)創(chuàng)建系統(tǒng)組件對象來運行系統(tǒng)命令。
如果是默認的Apache設(shè)置或者Web服務(wù)器以Loacalsystem權(quán)限或Administrators權(quán)限運行,攻擊者可以使用這個漏 洞來提升權(quán)限。所以我們必須要關(guān)閉掉com.allow_dcom這個參數(shù)默認是True,我們需要吧這個參數(shù)修改成 com.allow_dcom=false。第八個參數(shù)是expose_PHP。這個參數(shù)決定是否暴露 PHP 被安裝在服務(wù)器上。如果這個參數(shù)設(shè)置為On的話就會把PHP的版本等泄露出來了。我們的推薦值是Off。
基本上的參數(shù)我們就介紹完了,當然php.ini還需要配置,大部分設(shè)置跟安全是沒有關(guān)系的,很大一部分都跟PHP運行的效果(例如優(yōu)化)等有 關(guān)系,如果大家有興趣的話可以自己參考一下PHP的官方手冊來具體了解一下。注意:修改完php.ini以后,必須重新啟動IIS,不然你設(shè)置的內(nèi)容不會 即時生效。