|
PHP是一種功能強(qiáng)大的語言和解釋器,無論是作為模塊方式包含到web服務(wù)器里安裝的還是作為單獨(dú)的CGI 程序程序安裝的,都能訪問文件、執(zhí)行命令或者在服務(wù)器上打開鏈接。而這些特性都使得PHP運(yùn)行時(shí)帶來安全問題。雖然PHP是特意設(shè)計(jì)成一種比用Perl或C語言所編寫的CGI程序要安全的語言,但正確使用編譯時(shí)和運(yùn)行中的一些配置選項(xiàng)以及恰當(dāng)?shù)膽?yīng)用編碼將會(huì)保證其運(yùn)行的安全性。 一、安全從開始編譯PHP開始。在編譯PHP之前,首先確保操作系統(tǒng)的版本是最新的,必要的補(bǔ)丁程序必須安裝過。另外使用編譯的PHP也應(yīng)當(dāng)是最新的版本,關(guān)于PHP 的安全漏洞也常有發(fā)現(xiàn),請使用最新版本,如果已經(jīng)安裝過PHP請升級(jí)為最新版本:4.2.3。相關(guān)鏈接: 安裝編譯PHP過程中要注意的3個(gè)問題: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中的可用相對路徑,第二個(gè)參數(shù)指明腳本放在服務(wù)器的目錄。應(yīng)該對每個(gè)目錄 別名都用Directory,這樣可使得除系統(tǒng)管理員之外的人不知道Web服務(wù)器上CGI腳本的清單。Directory允許用戶創(chuàng)建自己的CGI腳本。也可用SriptAliasMatch,但Directory 更容易使用。允許用戶創(chuàng)建自己CGI腳本可能會(huì)導(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解析腳本是不可能的,因?yàn)橛肁ction指令時(shí),PHP解析器大多數(shù)要放在能夠執(zhí)行CGI的目錄下只有當(dāng)PHP腳本作為CGI程序執(zhí)行時(shí),才能把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í)行。下面是一個(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)對于安全性和驗(yàn)證有不少影響。例如,使用PHP訪問數(shù)據(jù)庫,除非數(shù)據(jù)庫支持內(nèi)建的訪問控制,將不得不設(shè)置數(shù)據(jù)庫對于用戶“nobody”的可訪問權(quán)限。這將意味著惡 意的腳本在沒有訪問用戶名和密碼,也能訪問并修改數(shù)據(jù)庫。通過Apache驗(yàn)證來保護(hù)數(shù)據(jù)不被暴露,或者也可使用LDAP、.htaccess文件等設(shè)計(jì)自己的訪問控制模型,并在PHP腳本中將此代碼作為其中部分引入。通常,一旦安全性建立,此處PHP用戶(此情形即Apache用戶)就風(fēng)險(xiǎn)大大降低了,會(huì)發(fā)現(xiàn)PHP護(hù)現(xiàn)在已被封禁了將可能的染毒文件 寫入用戶目錄的能力。此處最常犯的安全性錯(cuò)誤是賦予Apache服務(wù)器根(root)權(quán)限。將Apache用戶權(quán)限提升到根 權(quán)限是極端危險(xiǎn)的??赡軙?huì)危及整個(gè)系統(tǒng),因此要小心使用sudo,chroot安全隱患大的命令等。除非你對安全有絕對的掌握,否則不要讓其以ROOT權(quán)限運(yùn)行。更安全的php 上二、讓PHP的使用更安全。1、以安全模式運(yùn)行PHP 以安全模式運(yùn)行PHP是使PHP腳本安全使用的好方法,特別是在允許用戶使用自己開發(fā)的PHP腳本時(shí)。使用安全模 式會(huì)使PHP在運(yùn)行函數(shù)時(shí)檢查是否存在安全問題。include、readfile、fopen、file、unlink、rmdir等等:被包含的文件或者該文件所在目錄的所有者必須是正在運(yùn)行的腳本的所有者;Exec、System、Passthm等等:要執(zhí)行的程序必須位于特定的目錄(默認(rèn)為/usr/local/php/bin)。編譯PHP時(shí)可以用—with-exe-dir選項(xiàng)設(shè)定這個(gè)值。 Mysql—Connect:這個(gè)函數(shù)用可選的用戶名連接MySQL數(shù)據(jù)庫。在安全模式下,用戶名必須是當(dāng)前被執(zhí)行 的腳本的所有者,或運(yùn)行httpd的用戶名(通常是nobody)。HTTP Authentication:包含HTTP驗(yàn)證代碼腳本所有者的用戶ID(數(shù)字型)會(huì)自動(dòng)加到驗(yàn)證域。這樣可以防止有人通過抓取密碼的程序來欺騙同一個(gè)服務(wù)器上的HTTP驗(yàn)證腳本。 2、使用用戶識(shí)別和驗(yàn)證有時(shí)需要唯一地確認(rèn)一個(gè)用戶。用戶通常由請求和響應(yīng)系統(tǒng)確認(rèn)。用戶名/口令組合就是這種系統(tǒng)的一個(gè)很好的例子,比如系統(tǒng)要求給出A1i的口令,響應(yīng)的是Ali的口令。這樣驗(yàn)證是因?yàn)橹挥蠥li才知道這個(gè)口令。 (1)服務(wù)器端用戶驗(yàn)征這是用于服務(wù)端上對PHP程序要求最小的驗(yàn)證方法。只要讓Apache來管理對用戶的驗(yàn)證就行了。AuthName "Secret page" # The realm AuthType Basic # The password file has been placed outside the web tree AuthUserFile /home/car2002/website.pw <LIMIT GET POST> require valid-user </LIMIT> 你需要把上 述文件(文件名為.htaccess)放在需要保護(hù)的地方。用Apache 的htpasswd程序,可以建立包含用戶名和口令組合的文件。把這個(gè)文件放在Web目錄樹之外,只讓該文件的擁有者查 看和修改這個(gè)文件。當(dāng)然,Web服務(wù)器必須能夠讀取這個(gè)文件。如果想讀取被保護(hù)的目錄,Web服務(wù)器要求瀏覽器提供用戶名和密碼。瀏覽器彈出對話框,用戶可以輸入他們的用戶名和密碼。如果用戶名和密碼與口令文件中相符合,就允許用戶讀取被保護(hù)的頁面;反之,將得到錯(cuò)誤頁面,告訴用戶沒有通過驗(yàn)證。被保護(hù)的域會(huì)顯示出來以便用戶知道輸入那個(gè)用戶名和密碼。(2)在PHP中進(jìn)行用戶識(shí)別和驗(yàn)證和在Apache服務(wù)器端進(jìn)行用戶識(shí)別和驗(yàn)證相比,在PHP進(jìn)行用戶識(shí)別和驗(yàn)證有以下優(yōu)點(diǎn): A、可注銷。 B、可失效。如用戶登錄后40分鐘沒有瀏覽你的網(wǎng)站,你可強(qiáng)制他們重新通過驗(yàn)證。 C、可定制。 D、可基于數(shù)據(jù)庫。你可以用保存在各種各樣的數(shù)據(jù)庫里的數(shù)據(jù)來驗(yàn)證用
信息發(fā)布:廣州名易軟件有限公司 http://m.jetlc.com
|