pHp腳本濫用1.漏洞原因及學(xué)習(xí)與理解(一)

2023-11-30    分類: 網(wǎng)站建設(shè)

本文主要講解《如何防止pHp程序漏洞》。文章中的講解簡單明了,易學(xué)易懂?,F(xiàn)在,請跟隨小編的思路,深入了解《如何防止pHp程序產(chǎn)生的漏洞》吧!

虐待

1.漏洞原因:

是寫pHp網(wǎng)站最常用的函數(shù),支持相對路徑。很多pHp腳本直接使用某個輸入變量作為參數(shù),導(dǎo)致腳本任意引用、絕對路徑泄露等漏洞??聪旅娴拇a:

...

$=$_GET[""];

($);

...

顯然,我們只需要提交不同的變量就可以得到想要的頁面。如果提交的頁面不存在,可以在 pHp 腳本中報錯,并顯示實際絕對路徑(此問題的解決方法在下一篇文章中說明)。

2.漏洞解決方案:

這個漏洞的解決方法很簡單,就是先判斷頁面是否存在再繼續(xù)。或者更嚴(yán)格地說,使用數(shù)組來指定可用文件??聪旅娴拇a:

復(fù)制代碼代碼如下:

$=(".php",".php",".php"); //此處指定可用文件

if(($_GET[""])) //判斷是否有$

{

$=$_GET[""];

($ 為 $)

{

if($==$) //檢查文件是否在允許列表中

{

($);

$=真;

;

}

}

if($==true){ ($);}

else{ die("無效的參考頁!");}

}

這將很好地解決問題。

Tips:還有其他函數(shù)有這個問題:()、()、()、()等,寫的時候也要注意。

輸入變量未過濾

1.漏洞原因:

這個漏洞最早出現(xiàn)在ASp中,當(dāng)時造成的注入漏洞數(shù)不勝數(shù)。但是由于當(dāng)時 pHp 的影響力比較小,所以沒有多少人能夠關(guān)注到這一點。對于 pHp 來說,這個漏洞的影響要大于 ASp,因為更多的 pHp 腳本使用了基于文本的數(shù)據(jù)庫。當(dāng)然,還有SQL語句注入的問題。舉一個更經(jīng)典的例子,首先是數(shù)據(jù)庫:

復(fù)制代碼代碼如下:

$id=$_GET["id"];

$=" * FROM id='".$id."'"; //很經(jīng)典的SQL注入漏洞

$=($);

這里很明顯,我們可以使用注入來獲取數(shù)據(jù)庫的其他內(nèi)容。這里就不細說了,和ASp注入一樣,大家可以看前面的hack。然后我們看一下文本數(shù)據(jù)庫的問題:

復(fù)制代碼代碼如下:

$=$[""];

$=$[""];

$=$[""];

$fd=("test.php","a");

($fd,"\r\n$&line;$&line;$");

($fd);

文中的漏洞可以說是比較嚴(yán)重了。如果我們在提交的變量中插入一小段 pHp 代碼,我們就可以將這個文本數(shù)據(jù)庫 test.php 變成一個 pHp 后門。甚至插入上傳代碼,這樣我們就可以上傳一個完整的pHp后門。然后提升權(quán)限,服務(wù)器就是你的了。

2.漏洞解決方案:

這個漏洞的解決方法其實很簡單,就是嚴(yán)格過濾所有提交的變量。替換一些敏感字符。我們可以使用 pHp 提供的 () 函數(shù)來替換 HTML 內(nèi)容。下面是一個例子:

復(fù)制代碼代碼如下:

//構(gòu)造過濾函數(shù)

($文本)

{

$=("操","操"); //詞匯過濾列表

$text=($text);

($ as $) //這里進行詞匯過濾

{

if(($text,$)==true){ die("錯誤:您提交的內(nèi)容包含敏感詞,請不要提交敏感內(nèi)容。");}

}

$text=($text); //HTML 替換

//將回車替換為

$text=("\r"," ",$text);

$text=("\n","",$text);

$text=("&line;","│",$text); //替換文本數(shù)據(jù)庫分隔符“&line;” 全角“│”

$text=("/\s{ 2 }/"," ",$text); //空間替換中國網(wǎng)管聯(lián)盟

$text=("/\t/"," ",$text); //或空格替換

if(()){ $text=($text);} //如果開啟,則替換\'

$文本;

}

$=$[""];

$=$[""];

$=$[""];

//過濾所有輸入

$=($);

$=($);

$=($);

$fd=("test.php","a");

($fd,"\r\n$&line;$&line;$");

($fd);

經(jīng)過一些替換和過濾后,您可以安全地將數(shù)據(jù)寫入文本或數(shù)據(jù)庫。

管理員判斷不完整

1.漏洞原因:

我們使用pHp編寫腳本,通常涉及到管理員的權(quán)限。并且有些腳本只對管理員權(quán)限做出“是”的判斷,而往往忽略“否”的判斷。在pHp配置文件中打開的情況(4.2.0及以后的版本默認是關(guān)閉的,但是很多人為了方便打開,是極其危險的行為),會出現(xiàn)提交變量 假裝是管理員。我們來看一下示例代碼:

復(fù)制代碼代碼如下:

$=""; //判斷是否的變量

$=$["符號"]; //獲取用戶變量

如果($==$)

{

$=真;

}

if($){ echo "現(xiàn)在是管理員狀態(tài)。";}

看起來很安全,哈哈。現(xiàn)在我們假設(shè) pHp 配置文件已打開。我們提交這樣一個地址“test.php?=true”,你看到結(jié)果了嗎?雖然我們沒有正確的,但我們提交的變量由于打開狀態(tài)自動注冊為真。而且,腳本缺少“否”判斷,這讓我們可以通過=true 成功獲取管理員權(quán)限。這個問題存在于大多數(shù)網(wǎng)站和論壇中。

2.漏洞解決方案:

解決這個問題,我們只需要在腳本中給管理員添加一個“否”判斷即可。我們?nèi)匀患僭O(shè) pHp 配置文件是打開的??匆幌麓a:

復(fù)制代碼代碼如下:

$=""; //判斷是否的變量

$=$["符號"]; //獲取用戶變量

如果($==$)

{

$=真;

}

別的

{

$=;

}

if($){ echo "現(xiàn)在是管理員狀態(tài)。";}

這樣,即使攻擊者提交的變量=true 不正確,腳本也會在以后的判斷中設(shè)置$為。這解決了部分問題。但是,因為$是一個變量,如果以后其他腳本引用出現(xiàn)漏洞,重新給$賦值,就會造成新的危機。因此,我們應(yīng)該使用常量來存儲管理員權(quán)限的判斷。使用()語句定義一個常量來記錄管理員的權(quán)限。之后,如果重新賦值,就會報錯,達到保護的目的??聪旅娴拇a:

復(fù)制代碼代碼如下:

$=""; //判斷是否的變量

$=$["符號"]; //獲取用戶變量

如果($==$)

{

(,真的);

}

別的

{

(,);

}

if(){ echo "現(xiàn)在是管理員狀態(tài)。";}

值得注意的是,我們已經(jīng)使用了語句,所以在調(diào)用常量之前不要習(xí)慣性地添加變量符號$,而是使用and!。

文本數(shù)據(jù)庫曝光

1.漏洞原因:

如前所述,由于文本數(shù)據(jù)庫具有很大的靈活性,因此不需要任何外部支持。此外,pHp 具有非常強的文件處理能力,因此在 pHp 腳本中廣泛使用文本數(shù)據(jù)庫。甚至有幾個使用文本數(shù)據(jù)庫的優(yōu)秀論壇程序。但有得有失,文本數(shù)據(jù)庫的安全性低于其他數(shù)據(jù)庫。

2.漏洞解決方案:

作為普通文件,可以下載文本數(shù)據(jù)庫,就像MDb一樣。所以我們必須通過保護MDb來保護文本數(shù)據(jù)庫。將文本數(shù)據(jù)庫的后綴更改為.pHp。并加入數(shù)據(jù)庫的第一行。這樣,文本數(shù)據(jù)庫就會作為pHp文件使用,第一行就退出執(zhí)行。即返回一個空頁面,從而達到保護文本數(shù)據(jù)庫的目的。

錯誤路徑泄漏

1.漏洞原因:

pHp遇到錯誤時,會給出錯誤腳本的位置、行號和原因,例如:

: 在 D:\\\test.php 第 3 行使用 test-'test'

很多人說這沒什么大不了的。但是泄露實際路徑的后果是難以想象的。對于某些入侵者來說php代碼執(zhí)行漏洞,這些信息非常重要。其實現(xiàn)在很多服務(wù)器都有這個問題。

有的網(wǎng)管干脆把pHp配置文件里的設(shè)置設(shè)為Off,但我覺得這個方法太消極了。有時,我們確實需要 pHp 返回錯誤消息以進行調(diào)試。并且可能需要在發(fā)生錯誤時給用戶一個解釋,甚至導(dǎo)航到另一個頁面。

2.漏洞解決方案:

pHp提供了一個從4.1.0開始的自定義錯誤處理函數(shù)(),但是很少有腳本編寫者知道。在很多 pHp 論壇中,我只看到了一些處理這種情況的。使用方法如下:

([, 整數(shù) ])

現(xiàn)在我們使用自定義錯誤處理來過濾掉實際路徑。

復(fù)制代碼代碼如下:

//身份判斷為管理員,true為管理員。

//自定義錯誤處理函數(shù)必須有這4個輸入變量$,$,$,$,否則無效。

($,$,$,$)

{

//如果你不是管理員,過濾實際路徑

如果(?。?/p>

{

$=((),"",$);

$=((),"",$);

}

($)

{

案件:

echo ": [ID $] $ (行: $ of $)

\n";

echo "程序已停止運行,請聯(lián)系管理員。";

//遇到關(guān)卡錯誤時退出腳本

出口;

;

案件:

echo ": [ID $] $ (行: $ of $)

\n";

;

//不顯示電平錯誤

;

}

}

//將錯誤處理設(shè)置為函數(shù)

("");

這樣就可以很好的解決安全性和調(diào)試方便性之間的矛盾。而且你也可以花一點時間思考,讓錯誤信息更美觀,以配合網(wǎng)站的風(fēng)格。但有兩點需要注意:

(1), ,,,, 不會被這個句柄處理,也就是會以最原始的方式顯示出來。不過,這些錯誤是編譯或者pHp內(nèi)核錯誤,一般情況下不會發(fā)生。

(2)使用()后,()會失效,即所有的錯誤(除了上面的錯誤)都會由自定義函數(shù)處理。

關(guān)于()的其他信息可以參考pHp官方手冊。

pOST 漏洞

1.漏洞原因:

如前所述,依賴注冊變量是一個壞習(xí)慣。在一些留言簿和論壇程序中,需要嚴(yán)格檢查獲取頁面的方法和提交的時間間隔。防止泛濫的發(fā)帖和外部提交。下面我們來看看一個留言板程序的代碼:

復(fù)制代碼代碼如下:

...

$=($);

$=($);

$=($);

$fd=("data.php","a");

($fd,"\r\n$&line;$&line;$");

($fd);

顯然,如果我們提交 URL “post.php?=&=&="。數(shù)據(jù)將正常寫入文件。該程序不檢測變量的來源和瀏覽器獲取頁面的方式。如果我們多次提交到這個頁面,它就會像洪水一樣?,F(xiàn)在一些軟件利用這個漏洞在論壇或留言簿上發(fā)布廣告。這是一種可恥的行為(我朋友的留言簿一周就塞滿了10多頁,無奈)。

2.漏洞解決方案:

在處理和保存數(shù)據(jù)之前,首先要確定瀏覽器是如何獲取頁面的。使用 $[""] 變量來獲取瀏覽器獲取頁面的方式。檢查它是否是“pOST”。腳本中用于記錄用戶是否通過正常方式提交數(shù)據(jù)(即填寫待提交內(nèi)容的頁面)。或者使用 $[""] 來檢測,但不推薦這樣做。因為有些瀏覽器沒有設(shè)置,有些防火墻也會屏蔽。另外,我們還需要檢查提交的內(nèi)容,看看數(shù)據(jù)庫中是否有重復(fù)的內(nèi)容。以留言板為例php代碼執(zhí)行漏洞,使用確定:

在填寫瀏覽內(nèi)容的頁面,我們在最前面添加:

$[""]=time(); //注冊和填寫的時間

在接收和保存消息數(shù)據(jù)的頁面上,我們在處理數(shù)據(jù)之前也使用如下處理:

復(fù)制代碼代碼如下:

if(($[""])!=”pOST”){ die(": Do not .");} //檢查頁面獲取方式是否為pOST

if(!($[""]) or (time()-$[""] <10)){ die(": Do not .");} //檢查消息并填寫時間

if(($[""]) and (time()-$[""] <120)){ die("錯誤:兩次提交的間隔不能少于2分鐘。"); } //查看消息間隔

($[""]); //注銷變量,防止進入一次填寫頁面后多次提交

$[""]=time(); //注冊發(fā)送消息的時間,防止?jié)菜驉阂夤?/p>

...

數(shù)據(jù)處理和存儲

感謝您的閱讀。以上就是《如何防止pHp程序產(chǎn)生的漏洞》的內(nèi)容。看了這篇文章,相信大家對如何防范pHp程序產(chǎn)生的漏洞有了更深入的了解。每個人都需要通過實踐來驗證。這就是伊素云。小編會為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

網(wǎng)站標(biāo)題:pHp腳本濫用1.漏洞原因及學(xué)習(xí)與理解(一)
文章地址:http://www.muchs.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)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)