Windows+IIS+PHP安全配置之php篇
作者: 鄭曉 分類: PHP 發(fā)布于: 2013-05-24 21:43 瀏覽:10,109 評論(9)
既然是進行windows下IIS+PHP的安全配置,首先要進行安全配置的就是PHP了。估計大多數(shù)新手所了解的配置好php環(huán)境只是能使服務(wù)器正常解析PHP,但并沒有做出安全方面的配置,里面還有很多的默認設(shè)置是不安全的。在網(wǎng)上很多的配置php環(huán)境的教程中也并沒有介紹PHP安全方面的配置。
要配置PHP,首先想到的文件是什么?對,php.ini,現(xiàn)在讓我們先來了解一些php.ini的基本概念。在php.ini中,配置指令的格式如下:directive = value 指令名(directive)是大小寫敏感的!所以”foo=bar”不同于”FOO=bar”。值(value)可以是:
1. 一個數(shù)字,整數(shù)或浮點數(shù),如:0,20,1024,0.5等等)
2. 一個字符串,如:”foo”、”x:\php\ext”
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ù)庫配置,and so on…(賣弄一下三級半的E文)。
了解了基本概念以后我們就可以開始進行配置了,Let’s go!
1、register_globals
說明:這個配置影響到php如何接收傳遞過來的參數(shù),說白了register_globals的意思就是注冊為全局變量,所以當該參數(shù)為值On的時候,傳遞過來的值會被直接的注冊為全局變量直接使用,而當該參數(shù)值為Off的時候,我們需要到從特定的數(shù)組里去得到它。很多的php漏洞一大部分是因為Register_Globals為On的時候被利用的,所以強烈推薦將這個參數(shù)修改成Off,php目前的最高版中此參數(shù)都是默認是Off的,如果你用的版本比較老的話一定要修改這里。
2、magic_quotes_gpc
說明:如果你把magic_quotes_gpc設(shè)置成了Off,那么php就不會對4種字符’ (單引號), ” (雙引號), \ (反斜線) 和 空字符進行轉(zhuǎn)義,那這樣的話就會造成服務(wù)器可能會被非法注入的可能。但是如果你把Magic_quotes_gpc設(shè)置成On的話,php就會給以get、post等方式提交來的變量中含有的這四種字符加上\反斜扛進行轉(zhuǎn)義,這樣就會大大地提高php的安全性。強烈推薦將Magic_quotes_gpc設(shè)置為On。
3、display_errors
說明: php的display_errors參數(shù)就是幫助開發(fā)者定位和確定這些錯誤的。可是如果php提供的這些信息被黑客了解到的話,這就不妙了。這對于黑客來說可是非常重要的信息,因為很多時候的滲透都需要知道web目錄,例如webshell的寫入等等。所以強烈推薦大家把這個參數(shù)設(shè)置成Off。
4、safe_mode
說明:就是我們常說的安全模式(在一些vps控制面板和一些程序后臺經(jīng)常會看到這個)。php的安全模式是個非常重要的內(nèi)嵌的安全機制,能夠控制一些php中的函數(shù),比如system()等函數(shù),同時把很多文件操作函數(shù)進行了權(quán)限控制,也不允許對某些關(guān)鍵文件的訪問,比如/etc/passwd,但是默認的php.ini是沒有打開安全模式的,把它打開。safe_mode = on。
5、open_basedir
說明:使用open_basedir選項能夠控制PHP腳本只能訪問指定的目錄,這樣能夠避免PHP腳本訪問不應(yīng)該訪問的文件,一定程度上限制了webshell的危害,一般可以設(shè)置為只能訪問網(wǎng)站目錄(假設(shè)你的網(wǎng)站目錄為E:\www):open_basedir = E:\www
6、disable_functions
說明:使用disable_functions可以限制一些對于系統(tǒng)來說威脅很大的函數(shù)。
例如,我們通常在配置完php環(huán)境后,都會驕傲的使用phpinfo()函數(shù)來打印php系統(tǒng)信息,這是確實是很爽的,但對于一些駭客來說更爽,因為phpinfo()函數(shù)可以打印出絕大多數(shù)php的環(huán)境信息。還有入侵者可以利用system(),exec()等函數(shù)來執(zhí)行一些系統(tǒng)命令等等。所以確定我們環(huán)境沒問題后,需要及時禁用掉這些函數(shù)。推薦過濾的函數(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ù)器(或您的網(wǎng)站程序)是否需要禁用。
7、com.allow_dcom
說明: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。
8、expose_php
說明:這個參數(shù)決定是否暴露PHP被安裝在服務(wù)器上。如果這個參數(shù)設(shè)置為On的話就會把php的版本等泄露出來了。例如默認會在在服務(wù)器的信息頭中加上其簽名:X-Powered-By: PHP/5.3.7。推薦設(shè)置為Off。
好了,關(guān)于php.ini方面的設(shè)置今天先講到這里,現(xiàn)在可以ctrl+s一下,然后去重啟你的IIS了,否則你的修改不會生效。
本文采用知識共享署名-非商業(yè)性使用 3.0 中國大陸許可協(xié)議進行許可,轉(zhuǎn)載時請注明出處及相應(yīng)鏈接。
本文永久鏈接: http://yjfs.org.cn/windows-iis-php-security-config.html
博主似乎說的是php的安全配置, 而不是iis哦?
換句話說, 你這些配置, 似乎在Apache中也可以用這種方法??!