Windows下PHP+MySQL+IIS安全平臺III 變態配置
原創【51CTO.com 獨家特稿】經過第一,二部分的學習我們已經了解到了IIS+MySQL+PHP的基本配置過程和Windows的基本權限設置。這一部分我們需要討論php的安全配置還有Web目錄的安全配置,當然也必須有IIS的變態安全配置了。我這里先廢話幾句。
我們最終的目標是Web站點只運行php,不支持asp不支持asp.net,讓特定的目錄或者子網站不能執行php腳本,例如圖片目錄,我們對它設置成不能運行php,這樣就算您的網站被“黑客”登錄了后臺,能上傳文件。但是最終他也不能執行webshell。
就算拿到了webshell,他也不能讀目錄或者文件,不能執行命令。換句大話就是說強大的webshell在黑客手上沒有任何的利用價值,讓黑客最終直接抓狂而死。呵呵!其實做到這一點不是非常的難,跟隨我的腳步來吧。學完本文章你就能獨立的完成這樣的變態的服務器配置了。
一、php.ini文件變態配置
我們為什么把php.ini放在最前面寫呢,因為我們的Web網站是php的,所以很多默認的選項是不安全的。給黑客留下了非常多的可利用機會,所以第一步我們必須要把php.ini設置的變態些,這樣就能阻止一般腳本黑客的攻擊了。
我們首先來了解一些php.ini的基本概念性??瞻鬃址鸵苑痔栭_始的行被簡單地忽略。設置指令的格式如下:directive = value 指令名(directive)是大小寫敏感的!所以"foo=bar"不同于"FOO=bar"。值(value)可以是:
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全局配置,數據庫配置,等等。如圖1所示是一個基本的php.ini的例子。了解了基本的概念以后我們就可以開始變態配置之旅。
![]() |
圖1 |
第一個重要的參數是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提供的這些信息被黑客了解到的話,這就不妙了。如圖2所示為某國庫的網站,因為對display_errors沒有進行設置,導致web目錄泄露。這對于黑客來說可是非常重要的信息,因為很多時候的滲透都需要知道web目錄,例如webshell的寫入等等。所以我們強烈推薦大家把這個參數設置成Off。
![]() |
圖2 |
第四個重要的參數就是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 被安裝在服務器上。如圖3所示,如果這個參數設置為On的話就會把php的版本等泄露出來了。我們的推薦值是Off。
![]() |
圖3 |
基本上的參數我們就介紹完了,當然php.ini還需要配置,大部分設置跟安全是沒有關系的,很大一部分都跟PHP運行的效果(例如優化)等有關系,如果大家有興趣的話可以自己參考一下php的官方手冊來具體了解一下。注意:修改完php.ini以后,必須重新啟動IIS,不然你設置的內容不會即時生效。
#p#
二、 IIS變態配置
我們配置完了php.ini,雖然已經算是相當安全了。但是畢竟最重要的設置還是在IIS上面,IIS可以限制某些用戶的登錄,同時也可以為數據增加SSL(安全套接層)來增強數據在傳輸過程中的安全性??梢岳肐IS限制某些應用程序例如php的執行規則,例如,讓php只能運行在指定的目錄中,其他的目錄是不能執行php的。下面舉個例子就好理解了,例如:www.sina.com這個網站,大家都知道的,這個是新浪的。
新浪每天的訪問量是非常大的,所以他不可能把所有的東西都放在一個服務器上面,這個時候可能就會把特定的資源例如圖片,視頻等放到一個專門的服務器上。這個時候,新浪的安全管理員就做了個非常變態的策略,就是在這些提供特定資源的服務器上面不能運行任何的腳本,例如不能執行php等,當然我這里只是舉個例子,因為大部分的新浪的服務器都是Linux系列的,在他上面跑的可能是Nginx或者是apache,apache的這部分設置我們會在以后的教程中涉及。
所以希望大家關注我寫的文章啊,呵呵!第一個變態的服務器配置.我們繼續來討論IIS.基本的配置請參考第一部分的文章,這里我們就不多說廢話了,我們第一個實現的功能是特定的php目錄或者是網站不能運行php。如圖4所示是我們的網站和網站的資源。劃線部分是我們的目錄,這里我新建一個目錄例如images目錄,然后在images目錄下建立一個2009.php的文件,內容是phpinfo,如圖5說明我們正常執行了。我們要達到的目的是讓這個目錄不支持php的執行.下面我們來看一下如何實現的。我們有兩種辦法。
第一種是首先打開IIS信息服務管理器,打開我們的網站,然后找到我們剛才新建的目錄,右鍵點擊目錄屬性,如圖6所示。我們看劃紅線的地方,這里有三個選項,分別是無,純腳本,還有一個是腳本和可執行文件。這里我們選擇無,然后單擊“確定”按鈕。如圖7所示,我們再刷新一下就會看到2009.php不可以運行了。
第二種辦法是利用應用程序池來配置,具體的實現方法為:如圖8所示,我們選擇畫紅線的部分,然后就創建了一個和網站名字一樣的應用程序池,然后我們單擊“配置”按鈕出現如圖9所示的畫面,我們這里把.php的擴展去掉。如圖10所示,我們的腳本不能運行了,出現了404的錯誤,但是我們訪問圖片還是一樣可以訪問,如圖11所示。當然上面的配置也可以用于特定的服務器,例如,您的公司規模比較大,需要建立一個專門的圖片服務器來緩解主服務器的負載,就可以使用這個很變態的方法。
![]() |
圖4 |
![]() |
圖5 |
![]() |
圖6 |
![]() |
圖7 |
![]() |
圖8 |
![]() |
圖9 |
![]() |
圖10 |
![]() |
圖11 |
第二個變態的服務器配置相信一部分人都知道就是給特定的目錄上集成Windows 2003的身份驗證功能,例如后臺的設置。一個很常見的場景如下:如果我的后臺目錄是admin的話,我這里有2個驗證用戶和密碼。
第一道防護是服務器上的集成身份驗證,就是給服務器上添加一個用戶,然后設置一個非常變態的密碼。
第二道防護就是網站本身的用戶名和密碼,當然這兩道防護的密碼一定不能相同,不然跟沒用一樣。下面,我們來實現一下這個功能。例如,我們要配置的目錄是admin,右鍵點擊admin的屬性,如圖12所示,我們單擊“身份驗證和訪問控制”下的“編輯”按鈕,彈出如圖13所示的對話框,我們選擇“集成windows身份驗證”就可以了,同時去掉“啟用匿名”前面的對勾,然后單擊“確定”按鈕。我們再次訪問后臺目錄就會出現了如圖14所示的畫面,要求我們輸入windows服務器上的用戶名和密碼。
我們現在新建一個本地的用戶,然后把他的權限設置為最小的。我們單擊開始菜單 -> 運行 -> 輸入cmd,然后在cmd中輸入net user test test /add。添加一個用戶,這一步沒啥說的。下面講解如何降低test用戶的權限,右鍵點擊“我的電腦”,選擇“管理”,彈出“計算機管理”對話框,如圖15所示,選擇右鍵單擊剛才新建的test用戶選擇“屬性”,我們選擇用戶“密碼永不過期”,然后選擇撥入選擇拒絕訪問.點確定,回到剛才的目錄中,我們輸入我們新建的用戶就可以查看了。
![]() |
圖12 |
![]() |
圖13 |
![]() |
圖14 |
![]() |
圖15 |
![]() |
圖16 |
#p#
三、web目錄的變態權限配置
其實我們在第2部分的時候已經涉及到了基本的權限配置原則等,這里我們只是做一些擴展。例如,我們的網站的目錄是E:\test。右鍵單擊目錄,選擇“屬性”,彈出如圖17所示對話框,我們把IUSR_計算機名添加進來,這個賬號是IIS匿名用戶的訪問賬號。
注意畫長方形的地方一定不要選擇。不然黑客就能上傳webshell到你的目錄了。但是這樣設置的話是不行的,例如你的網站需要上傳圖片的時候,這樣你自己也不能上傳了,這個時候我們需要把圖片目錄設置成可寫的,如圖18所示。同時結合我們第2部分中學習的IIS變態設置,把這個目錄設置成不能執行php的。這樣就達到了目錄的變態配置目的了。
![]() |
圖17 |
![]() |
圖18 |
#p#
四、總結
到這里我們已經把Windows+PHP+IIS+MYSQL的變態安全課程講完了,縱觀本文章,我們可以了解到IIS+MYSQL+PHP的基本配置,NTFS的安全配置等安全配置。這樣我們就得到了一個比較高水平的而且安全的服務器了,但是僅這些內容是遠遠不夠的,因為Windows系列不僅包含web服務,還有很多其他的服務,例如FTP的安全,還有組策略等我們都沒有涉及。
如果以后有機會的話,我絕對會跟大家繼續討論有關于Windows整體安全性。謝謝大家的關注,如果您有什么問題或者是建議的話請聯系我,我在安天365論壇(http://www.antian365.com/bbs)的ID是cnbird?!?1CTO.COM 獨家特稿,轉載請注明出處及作者!】
【編輯推薦】