安全編譯 PHP最初是被稱作Personal Home Page,后來(lái)隨著PHP成為一種非常流行的腳本語(yǔ)言,名稱也隨之改變了,叫做Professional HyperText PreProcessor。以PHP4.2為例支持它的WEB服務(wù)器有:Apache, Microsoft Internet information Sereve, Microsoft Personal web Server,AOLserver,Netscape Enterprise 等等。 PHP是一種功能強(qiáng)大的語(yǔ)言和解釋器,無(wú)論是作為模塊方式包含到web服務(wù)器里安裝的還是作為單獨(dú)的CGI程序程序安裝的,都能訪問(wèn)文件、執(zhí)行命令或者在服務(wù)器上打開(kāi)鏈接。而這些特性都使得PHP運(yùn)行時(shí)帶來(lái)安全問(wèn)題。雖然PHP是特意設(shè)計(jì)成一種比用Perl或C語(yǔ)言所編寫(xiě)的CGI程序要安全的語(yǔ)言,但正確使用編譯時(shí)和運(yùn)行中的一些配置選項(xiàng)以及恰當(dāng)?shù)膽?yīng)用編碼將會(huì)保證其運(yùn)行的安全性。 一、安全從開(kāi)始編譯PHP開(kāi)始。 在編譯PHP之前,首先確保操作系統(tǒng)的版本是最新的,必要的補(bǔ)丁程序必須安裝過(guò)。另外使用編譯的PHP也應(yīng)當(dāng)是最新的版本,關(guān)于PHP的安全漏洞也常有發(fā)現(xiàn),請(qǐng)使用最新版本,如果已經(jīng)安裝過(guò)PHP請(qǐng)升級(jí)為最新版本:4.2.3。 相關(guān)鏈接:http://security.e-matters.de/advisories/012002.html 安裝編譯PHP過(guò)程中要注意的3個(gè)問(wèn)題: 1、只容許CGI文件從特定的目錄下執(zhí)行:首先把處理CGI腳本的默認(rèn)句柄刪除,然后在要執(zhí)行CGI腳本的目錄在http.conf 文件中加入ScriptAlias指令。 #Addhadler cgi-script .cgi ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" <Directory "/usr/local/apache/cgi-bin'> AllowOverride None Options None Order allow,deny Allow from all </Directory> <Directory "/home/*/public_html/cgi-bin"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory>
SriptAlias的第一個(gè)參數(shù)指明在Web中的可用相對(duì)路徑,第二個(gè)參數(shù)指明腳本放在服務(wù)器的目錄。應(yīng)該對(duì)每個(gè)目錄 別名都用Directory,這樣可使得除系統(tǒng)管理員之外的人不知道Web服務(wù)器上CGI腳本的清單。 Directory允許用戶創(chuàng)建自己的CGI腳本。也可用SriptAliasMatch,但Directory更容易使用。 允許用戶創(chuàng)建自己 CGI腳本可能會(huì)導(dǎo)致安全問(wèn)題,你可能不希望用戶創(chuàng)建自己的CGI。 Apache默認(rèn)配置是注釋掉cgi—script的處理句柄,但有/cgi-bin目錄使用SriptAlias和Directory指令。 你也可禁止CGI執(zhí)行,但仍允許執(zhí)行PHP腳本。 2.把PHP解析器放在web目錄外 把PHP解析器放在Web目錄樹(shù)外是非常重要的做法。這樣可以防止web服務(wù)器對(duì)PHP的解析器的濫用。特別是 不要把PHP解析器放在cgi-bin或允許執(zhí)行CGI程序的目錄下。然而,使用Action解析腳本是不可能的,因?yàn)橛肁ction指令時(shí),PHP解析器大多數(shù)要放在能夠執(zhí)行CGI的目錄下只有當(dāng)PHP腳本作為CGI程序執(zhí)行時(shí),才能把PHP解析器放在Web目錄樹(shù)之外。 如果希望PHP腳本作為CGI程序執(zhí)行(這們可以把PHP解析器放在Web目錄樹(shù)之外),可以這樣: ( 1)所有的PHP腳本必須位于能執(zhí)行CGI程序的目錄里。 ( 2)腳本必須是可執(zhí)行的(僅在UNIX/Linux機(jī)器里)。 (3)腳本必須在文件頭包括PHP解析器的路徑。 你可用下面命令使PHP腳本為可執(zhí)行: #chmod +x test.php4 這樣使在當(dāng)前目錄下的文件名為test.PhP4的腳本變?yōu)榭蓤?zhí)行。 下面是一個(gè)能作為CGI程序運(yùn)行的PHP腳的小例子。 #!/usr/local/bin/php echo "This is a my small cgi program” 3. 按Apache模塊方式安裝: 當(dāng)將PHP作為Apache模塊使用時(shí),它將繼承Apche的用戶權(quán)限(一般情況下用戶為“nobody”)。這一點(diǎn)對(duì)于安全性和驗(yàn)證有不少影響。例如,使用PHP訪問(wèn)數(shù)據(jù)庫(kù),除非數(shù)據(jù)庫(kù)支持內(nèi)建的訪問(wèn)控制,將不得不設(shè)置數(shù)據(jù)庫(kù)對(duì)于用戶“nobody”的可訪問(wèn)權(quán)限。這將意味著惡意的腳本在沒(méi)有訪問(wèn)用戶名和密碼,也能訪問(wèn)并修改數(shù)據(jù)庫(kù)。通過(guò)Apache驗(yàn)證來(lái)保護(hù)數(shù)據(jù)不被暴露,或者也可使用LDAP、.htaccess文件等設(shè)計(jì)自己的訪問(wèn)控制模型,并在PHP腳本中將此代碼作為其中部分引入。 通常,一旦安全性建立,此處PHP用戶(此情形即Apache用戶)就風(fēng)險(xiǎn)大大降低了,會(huì)發(fā)現(xiàn)PHP護(hù)現(xiàn)在已被封禁了將可能的染毒文件寫(xiě)入用戶目錄的能力。 此處最常犯的安全性錯(cuò)誤是賦予Apache服務(wù)器根(root)權(quán)限。 將Apache用戶權(quán)限提升到根權(quán)限是極端危險(xiǎn)的?赡軙(huì)危及整個(gè)系統(tǒng),因此要小心使用sudo,chroot安全隱患大的命令等。除非你對(duì)安全有絕對(duì)的掌握,否則不要讓其以ROOT權(quán)限運(yùn)行。 |
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!