明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

[進(jìn)階知識]PHP程序安全策略

[摘要]安全編譯  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)行。