我們在學習1. 用引號界定的字符串(如:”foo”)
2. 一個數字(整數或浮點數,如:0,1,34,-1,33.55)
3. 一個PHP常量(如:E_ALL,M_PI)
4. 一個INI常量(On,Off,none)
5. 一個表達式(如:E_ALL & ~E_NOTICE)
還有另外一個是設置布爾值,1為On就是開啟,0為Off就是關閉。php.ini分了很多部分,例如:模塊部分,PHP全局配置,數據庫配置,等等。了解了基本的概念以後我們就可以開始變態配置之旅。
第一個重要的參數是register_globals. 這個配置影響到PHP如何接收傳遞過來的參數,說白了register_globals的意思就是注冊為全局變量,所以當該參數為值On的時候,傳遞過來 的值會被直接的注冊為全局變量直接使用,而當該參數值為Off的時候,我們需要到從特定的數組裡去得到它。從www.milw0rm.com很多的PHP漏洞來看一大部分是因為Register_Globals為On的時候被利用的,所以強烈推薦將這個參數修改成Off,PHP目前的最高版中此參數都是默 認是Off的,沒啥說的了,如果你用的版本比較老的話一定要修改這裡。
第二個重要的參數是magic_quotes_gpc。如果你把magic_quotes_gpc設置成了Off,那麼PHP就不會對4種字符 ‘ (單引號), ” (雙引號), (反斜線) 和 空字符進行轉義,那這樣的話就會造成服務器可能會被非法注入的可能。但是如果你把Magic_quotes_gpc設置成On的話,PHP就會 給$_POST,$_GET,$_COOKIE提交的變量中如果有上面四種字符的話就會加上反斜扛.這樣就會大大地提高PHP的安全性。強烈推薦將 Magic_quotes_gpc設置為On。
第三個比較重要的是display_errors。為什麼說這個參數重要呢,因為沒有不會犯錯誤的開發者,PHP的 display_errors參數就是幫助開發者定位和確定這些錯誤的。可是如果PHP提供的這些信息被黑客了解到的話,這就不妙了。比如某國庫的網站,因為對display_errors沒有進行設置,導致web目錄洩露。這對於黑客來說可是非常重要的信息,因為很多時候的滲透都需要知道web 目錄,例如webshell的寫入等等。所以我們強烈推薦大家把這個參數設置成Off。
第四個重要的參數就是safe_mode,就是我們常說的安全模式。PHP的安全模式是個非常重要的內嵌的安全機制,能夠控制一些PHP中的函 數,比如system()等函數,同時把很多文件操作函數進行了權限控制,也不允許對某些關鍵文件的訪問,比如/etc/passwd,但是默認的 php.ini是沒有打開安全模式的,我們把它打開。safe_mode = on。
第五個參數是open_basedir,使用open_basedir選項能夠控制PHP腳本只能訪問指定的目錄,這樣能夠避免PHP腳本訪問 不應該訪問的文件,一定程度上限制了webshell的危害,我們一般可以設置為只能訪問網站目錄(假設網站目錄為 E:test):open_basedir = E:test 第六個參數是disable_functions,使用disable_functions可以限制一些對於系統來說威脅很大的函數。
例如,我們在第一部分中看到的有PHPinfo()函數的網頁中可以看到關於PHP的環境變量等。還有可以利用system,exec等函數來 執行系統命令等等。這裡我們推薦過濾的函數如下。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。 大家如果對某個函數不了解的話,可以google搜索得到函數的作用,然後來決定您自己的服務器是否禁止掉。
第七個參數是Com組件。Windows平台下的PHP腳本平台存在一個安全漏洞,使得PHP設置即使在安全模式下(safe_mode),仍 舊允許攻擊者使用COM()函數來創建系統組件來執行任意命令。漏洞出現的原因是由於在安全模式下的PHP平台雖然system();pathru()函 數被禁止,但是com.allow_dcom的設置依舊是為true。以至於攻擊者可以使用COM()函數創建系統組件對象來運行系統命令。
如果是默認的Apache設置或者Web服務器以Loacalsystem權限或Administrators權限運行,攻擊者可以使用這個漏 洞來提升權限。所以我們必須要關閉掉com.allow_dcom這個參數默認是True,我們需要吧這個參數修改成 com.allow_dcom=false。第八個參數是expose_PHP。這個參數決定是否暴露 PHP 被安裝在服務器上。如果這個參數設置為On的話就會把PHP的版本等洩露出來了。我們的推薦值是Off。
基本上的參數我們就介紹完了,當然php.ini還需要配置,大部分設置跟安全是沒有關系的,很大一部分都跟PHP運行的效果(例如優化)等有 關系,如果大家有興趣的話可以自己參考一下PHP的官方手冊來具體了解一下。注意:修改完php.ini以後,必須重新啟動IIS,不然你設置的內容不會 即時生效。