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