2023-11-30 分類: 網(wǎng)站建設(shè)
本文主要講解《如何防止pHp程序漏洞》。文章中的講解簡(jiǎn)單明了,易學(xué)易懂?,F(xiàn)在,請(qǐng)跟隨小編的思路,深入了解《如何防止pHp程序產(chǎn)生的漏洞》吧!
虐待
1.漏洞原因:
是寫(xiě)pHp網(wǎng)站最常用的函數(shù),支持相對(duì)路徑。很多pHp腳本直接使用某個(gè)輸入變量作為參數(shù),導(dǎo)致腳本任意引用、絕對(duì)路徑泄露等漏洞??聪旅娴拇a:
...
$=$_GET[""];
($);
...
顯然,我們只需要提交不同的變量就可以得到想要的頁(yè)面。如果提交的頁(yè)面不存在,可以在 pHp 腳本中報(bào)錯(cuò),并顯示實(shí)際絕對(duì)路徑(此問(wèn)題的解決方法在下一篇文章中說(shuō)明)。
2.漏洞解決方案:
這個(gè)漏洞的解決方法很簡(jiǎn)單,就是先判斷頁(yè)面是否存在再繼續(xù)。或者更嚴(yán)格地說(shuō),使用數(shù)組來(lái)指定可用文件??聪旅娴拇a:
復(fù)制代碼代碼如下:
$=(".php",".php",".php"); //此處指定可用文件
if(($_GET[""])) //判斷是否有$
{
$=$_GET[""];
($ 為 $)
{
if($==$) //檢查文件是否在允許列表中
{
($);
$=真;
;
}
}
if($==true){ ($);}
else{ die("無(wú)效的參考頁(yè)!");}
}
這將很好地解決問(wèn)題。
Tips:還有其他函數(shù)有這個(gè)問(wèn)題:()、()、()、()等,寫(xiě)的時(shí)候也要注意。
輸入變量未過(guò)濾
1.漏洞原因:
這個(gè)漏洞最早出現(xiàn)在ASp中,當(dāng)時(shí)造成的注入漏洞數(shù)不勝數(shù)。但是由于當(dāng)時(shí) pHp 的影響力比較小,所以沒(méi)有多少人能夠關(guān)注到這一點(diǎn)。對(duì)于 pHp 來(lái)說(shuō),這個(gè)漏洞的影響要大于 ASp,因?yàn)楦嗟?pHp 腳本使用了基于文本的數(shù)據(jù)庫(kù)。當(dāng)然,還有SQL語(yǔ)句注入的問(wèn)題。舉一個(gè)更經(jīng)典的例子,首先是數(shù)據(jù)庫(kù):
復(fù)制代碼代碼如下:
$id=$_GET["id"];
$=" * FROM id='".$id."'"; //很經(jīng)典的SQL注入漏洞
$=($);
這里很明顯,我們可以使用注入來(lái)獲取數(shù)據(jù)庫(kù)的其他內(nèi)容。這里就不細(xì)說(shuō)了,和ASp注入一樣,大家可以看前面的hack。然后我們看一下文本數(shù)據(jù)庫(kù)的問(wèn)題:
復(fù)制代碼代碼如下:
$=$[""];
$=$[""];
$=$[""];
$fd=("test.php","a");
($fd,"\r\n$&line;$&line;$");
($fd);
文中的漏洞可以說(shuō)是比較嚴(yán)重了。如果我們?cè)谔峤坏淖兞恐胁迦胍恍《?pHp 代碼,我們就可以將這個(gè)文本數(shù)據(jù)庫(kù) test.php 變成一個(gè) pHp 后門(mén)。甚至插入上傳代碼,這樣我們就可以上傳一個(gè)完整的pHp后門(mén)。然后提升權(quán)限,服務(wù)器就是你的了。
2.漏洞解決方案:
這個(gè)漏洞的解決方法其實(shí)很簡(jiǎn)單,就是嚴(yán)格過(guò)濾所有提交的變量。替換一些敏感字符。我們可以使用 pHp 提供的 () 函數(shù)來(lái)替換 HTML 內(nèi)容。下面是一個(gè)例子:
復(fù)制代碼代碼如下:
//構(gòu)造過(guò)濾函數(shù)
($文本)
{
$=("操","操"); //詞匯過(guò)濾列表
$text=($text);
($ as $) //這里進(jìn)行詞匯過(guò)濾
{
if(($text,$)==true){ die("錯(cuò)誤:您提交的內(nèi)容包含敏感詞,請(qǐng)不要提交敏感內(nèi)容。");}
}
$text=($text); //HTML 替換
//將回車替換為
$text=("\r"," ",$text);
$text=("\n","",$text);
$text=("&line;","│",$text); //替換文本數(shù)據(jù)庫(kù)分隔符“&line;” 全角“│”
$text=("/\s{ 2 }/"," ",$text); //空間替換中國(guó)網(wǎng)管聯(lián)盟
$text=("/\t/"," ",$text); //或空格替換
if(()){ $text=($text);} //如果開(kāi)啟,則替換\'
$文本;
}
$=$[""];
$=$[""];
$=$[""];
//過(guò)濾所有輸入
$=($);
$=($);
$=($);
$fd=("test.php","a");
($fd,"\r\n$&line;$&line;$");
($fd);
經(jīng)過(guò)一些替換和過(guò)濾后,您可以安全地將數(shù)據(jù)寫(xiě)入文本或數(shù)據(jù)庫(kù)。
管理員判斷不完整
1.漏洞原因:
我們使用pHp編寫(xiě)腳本,通常涉及到管理員的權(quán)限。并且有些腳本只對(duì)管理員權(quán)限做出“是”的判斷,而往往忽略“否”的判斷。在pHp配置文件中打開(kāi)的情況(4.2.0及以后的版本默認(rèn)是關(guān)閉的,但是很多人為了方便打開(kāi),是極其危險(xiǎn)的行為),會(huì)出現(xiàn)提交變量 假裝是管理員。我們來(lái)看一下示例代碼:
復(fù)制代碼代碼如下:
$=""; //判斷是否的變量
$=$["符號(hào)"]; //獲取用戶變量
如果($==$)
{
$=真;
}
if($){ echo "現(xiàn)在是管理員狀態(tài)。";}
看起來(lái)很安全,哈哈?,F(xiàn)在我們假設(shè) pHp 配置文件已打開(kāi)。我們提交這樣一個(gè)地址“test.php?=true”,你看到結(jié)果了嗎?雖然我們沒(méi)有正確的,但我們提交的變量由于打開(kāi)狀態(tài)自動(dòng)注冊(cè)為真。而且,腳本缺少“否”判斷,這讓我們可以通過(guò)=true 成功獲取管理員權(quán)限。這個(gè)問(wèn)題存在于大多數(shù)網(wǎng)站和論壇中。
2.漏洞解決方案:
解決這個(gè)問(wèn)題,我們只需要在腳本中給管理員添加一個(gè)“否”判斷即可。我們?nèi)匀患僭O(shè) pHp 配置文件是打開(kāi)的??匆幌麓a:
復(fù)制代碼代碼如下:
$=""; //判斷是否的變量
$=$["符號(hào)"]; //獲取用戶變量
如果($==$)
{
$=真;
}
別的
{
$=;
}
if($){ echo "現(xiàn)在是管理員狀態(tài)。";}
這樣,即使攻擊者提交的變量=true 不正確,腳本也會(huì)在以后的判斷中設(shè)置$為。這解決了部分問(wèn)題。但是,因?yàn)?是一個(gè)變量,如果以后其他腳本引用出現(xiàn)漏洞,重新給$賦值,就會(huì)造成新的危機(jī)。因此,我們應(yīng)該使用常量來(lái)存儲(chǔ)管理員權(quán)限的判斷。使用()語(yǔ)句定義一個(gè)常量來(lái)記錄管理員的權(quán)限。之后,如果重新賦值,就會(huì)報(bào)錯(cuò),達(dá)到保護(hù)的目的。看下面的代碼:
復(fù)制代碼代碼如下:
$=""; //判斷是否的變量
$=$["符號(hào)"]; //獲取用戶變量
如果($==$)
{
(,真的);
}
別的
{
(,);
}
if(){ echo "現(xiàn)在是管理員狀態(tài)。";}
值得注意的是,我們已經(jīng)使用了語(yǔ)句,所以在調(diào)用常量之前不要習(xí)慣性地添加變量符號(hào)$,而是使用and!。
文本數(shù)據(jù)庫(kù)曝光
1.漏洞原因:
如前所述,由于文本數(shù)據(jù)庫(kù)具有很大的靈活性,因此不需要任何外部支持。此外,pHp 具有非常強(qiáng)的文件處理能力,因此在 pHp 腳本中廣泛使用文本數(shù)據(jù)庫(kù)。甚至有幾個(gè)使用文本數(shù)據(jù)庫(kù)的優(yōu)秀論壇程序。但有得有失,文本數(shù)據(jù)庫(kù)的安全性低于其他數(shù)據(jù)庫(kù)。
2.漏洞解決方案:
作為普通文件,可以下載文本數(shù)據(jù)庫(kù),就像MDb一樣。所以我們必須通過(guò)保護(hù)MDb來(lái)保護(hù)文本數(shù)據(jù)庫(kù)。將文本數(shù)據(jù)庫(kù)的后綴更改為.pHp。并加入數(shù)據(jù)庫(kù)的第一行。這樣,文本數(shù)據(jù)庫(kù)就會(huì)作為pHp文件使用,第一行就退出執(zhí)行。即返回一個(gè)空頁(yè)面,從而達(dá)到保護(hù)文本數(shù)據(jù)庫(kù)的目的。
錯(cuò)誤路徑泄漏
1.漏洞原因:
pHp遇到錯(cuò)誤時(shí),會(huì)給出錯(cuò)誤腳本的位置、行號(hào)和原因,例如:
: 在 D:\\\test.php 第 3 行使用 test-'test'
很多人說(shuō)這沒(méi)什么大不了的。但是泄露實(shí)際路徑的后果是難以想象的。對(duì)于某些入侵者來(lái)說(shuō)php代碼執(zhí)行漏洞,這些信息非常重要。其實(shí)現(xiàn)在很多服務(wù)器都有這個(gè)問(wèn)題。
有的網(wǎng)管干脆把pHp配置文件里的設(shè)置設(shè)為Off,但我覺(jué)得這個(gè)方法太消極了。有時(shí),我們確實(shí)需要 pHp 返回錯(cuò)誤消息以進(jìn)行調(diào)試。并且可能需要在發(fā)生錯(cuò)誤時(shí)給用戶一個(gè)解釋,甚至導(dǎo)航到另一個(gè)頁(yè)面。
2.漏洞解決方案:
pHp提供了一個(gè)從4.1.0開(kāi)始的自定義錯(cuò)誤處理函數(shù)(),但是很少有腳本編寫(xiě)者知道。在很多 pHp 論壇中,我只看到了一些處理這種情況的。使用方法如下:
([, 整數(shù) ])
現(xiàn)在我們使用自定義錯(cuò)誤處理來(lái)過(guò)濾掉實(shí)際路徑。
復(fù)制代碼代碼如下:
//身份判斷為管理員,true為管理員。
//自定義錯(cuò)誤處理函數(shù)必須有這4個(gè)輸入變量$,$,$,$,否則無(wú)效。
($,$,$,$)
{
//如果你不是管理員,過(guò)濾實(shí)際路徑
如果(?。?/p>
{
$=((),"",$);
$=((),"",$);
}
($)
{
案件:
echo ": [ID $] $ (行: $ of $)
\n";
echo "程序已停止運(yùn)行,請(qǐng)聯(lián)系管理員。";
//遇到關(guān)卡錯(cuò)誤時(shí)退出腳本
出口;
;
案件:
echo ": [ID $] $ (行: $ of $)
\n";
;
:
//不顯示電平錯(cuò)誤
;
}
}
//將錯(cuò)誤處理設(shè)置為函數(shù)
("");
…
這樣就可以很好的解決安全性和調(diào)試方便性之間的矛盾。而且你也可以花一點(diǎn)時(shí)間思考,讓錯(cuò)誤信息更美觀,以配合網(wǎng)站的風(fēng)格。但有兩點(diǎn)需要注意:
(1), ,,,, 不會(huì)被這個(gè)句柄處理,也就是會(huì)以最原始的方式顯示出來(lái)。不過(guò),這些錯(cuò)誤是編譯或者pHp內(nèi)核錯(cuò)誤,一般情況下不會(huì)發(fā)生。
(2)使用()后,()會(huì)失效,即所有的錯(cuò)誤(除了上面的錯(cuò)誤)都會(huì)由自定義函數(shù)處理。
關(guān)于()的其他信息可以參考pHp官方手冊(cè)。
pOST 漏洞
1.漏洞原因:
如前所述,依賴注冊(cè)變量是一個(gè)壞習(xí)慣。在一些留言簿和論壇程序中,需要嚴(yán)格檢查獲取頁(yè)面的方法和提交的時(shí)間間隔。防止泛濫的發(fā)帖和外部提交。下面我們來(lái)看看一個(gè)留言板程序的代碼:
復(fù)制代碼代碼如下:
...
$=($);
$=($);
$=($);
$fd=("data.php","a");
($fd,"\r\n$&line;$&line;$");
($fd);
顯然,如果我們提交 URL “post.php?=&=&="。數(shù)據(jù)將正常寫(xiě)入文件。該程序不檢測(cè)變量的來(lái)源和瀏覽器獲取頁(yè)面的方式。如果我們多次提交到這個(gè)頁(yè)面,它就會(huì)像洪水一樣?,F(xiàn)在一些軟件利用這個(gè)漏洞在論壇或留言簿上發(fā)布廣告。這是一種可恥的行為(我朋友的留言簿一周就塞滿了10多頁(yè),無(wú)奈)。
2.漏洞解決方案:
在處理和保存數(shù)據(jù)之前,首先要確定瀏覽器是如何獲取頁(yè)面的。使用 $[""] 變量來(lái)獲取瀏覽器獲取頁(yè)面的方式。檢查它是否是“pOST”。腳本中用于記錄用戶是否通過(guò)正常方式提交數(shù)據(jù)(即填寫(xiě)待提交內(nèi)容的頁(yè)面)。或者使用 $[""] 來(lái)檢測(cè),但不推薦這樣做。因?yàn)橛行g覽器沒(méi)有設(shè)置,有些防火墻也會(huì)屏蔽。另外,我們還需要檢查提交的內(nèi)容,看看數(shù)據(jù)庫(kù)中是否有重復(fù)的內(nèi)容。以留言板為例php代碼執(zhí)行漏洞,使用確定:
在填寫(xiě)瀏覽內(nèi)容的頁(yè)面,我們?cè)谧钋懊嫣砑樱?/p>
$[""]=time(); //注冊(cè)和填寫(xiě)的時(shí)間
在接收和保存消息數(shù)據(jù)的頁(yè)面上,我們?cè)谔幚頂?shù)據(jù)之前也使用如下處理:
復(fù)制代碼代碼如下:
if(($[""])!=”pOST”){ die(": Do not .");} //檢查頁(yè)面獲取方式是否為pOST
if(!($[""]) or (time()-$[""] <10)){ die(": Do not .");} //檢查消息并填寫(xiě)時(shí)間
if(($[""]) and (time()-$[""] <120)){ die("錯(cuò)誤:兩次提交的間隔不能少于2分鐘。"); } //查看消息間隔
($[""]); //注銷變量,防止進(jìn)入一次填寫(xiě)頁(yè)面后多次提交
$[""]=time(); //注冊(cè)發(fā)送消息的時(shí)間,防止?jié)菜驉阂夤?/p>
...
數(shù)據(jù)處理和存儲(chǔ)
感謝您的閱讀。以上就是《如何防止pHp程序產(chǎn)生的漏洞》的內(nèi)容??戳诉@篇文章,相信大家對(duì)如何防范pHp程序產(chǎn)生的漏洞有了更深入的了解。每個(gè)人都需要通過(guò)實(shí)踐來(lái)驗(yàn)證。這就是伊素云。小編會(huì)為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
網(wǎng)站標(biāo)題:pHp腳本濫用1.漏洞原因及學(xué)習(xí)與理解(一)
文章地址:http://www.rwnh.cn/news22/297772.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、品牌網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、建站公司、企業(yè)網(wǎng)站制作、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容