?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

和記娛最好h88285愽娛:PHP程序漏洞產生的原因和防范方法

?

濫用include

1.破綻緣故原由:

Include是編寫PHP網站中最常用的函數,并且支持相對路徑。有很多PHP腳本直接把某輸入變量作為Include的參數,造成隨意率性引用腳本、絕對路徑泄露等破綻??匆韵麓a:

...

$includepage=$_GET["includepage"];

include($includepage);

...

很顯著,我們只必要提交不合的Includepage變量就可以得到想要的頁面。假如提交一個不存在的頁面,就可以使PHP腳本發生差錯而泄露實際絕對路徑(這個問題的辦理法子鄙人面的文章有闡明)。

2.破綻辦理:

這個破綻的辦理很簡單,便是先判斷頁面是否存在再進行Include?;蛘吒陀泭首詈胔88285愽娛嚴格地,應用數組對可Include的文件作出規定??匆韵麓a:

$pagelist=array("test1.php","test2.php","test3.php"); //這里規定可進行include的文件

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

{

$includepage=$_GET["includepage"];

foreach($pagelist as $prepage)

{

if($includepage==$prepage) //反省文件是否在容許列表中

{

include($prepage);

$checkfind=true;

break;

}

}

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

else{ die("無效引用頁!"); }

}

這樣就可以很好地辦理問題了。

小提示:有此問題的函數還有:require(),require_once(),include_once(),readfile()等,在編寫的時刻也要留意。

未對輸入變量進行過濾

1.破綻緣故原由:

這個破綻早在ASP中呈現過,當時造成的注入破綻弗成勝數。但因為PHP在當時的影響力較小,以是沒有太多的人能夠留意這點。對付PHP來說,這個破綻的影響性比ASP更大年夜,由于有對照多的PHP腳本應用到文本型數據庫。當然也存在SQL語句的注入問題。舉個對照經典的例子,首先是數據庫的:

$id=$_GET["id"];

$query="SELECT * FROM my_table where id='".$id."'"; //很經典的SQL注入破綻

$result=mysql_query($query);

這里很顯著我們可以用注入來得到數據庫的其它內容了。這里就不再具體論述,和ASP注入一樣的,大年夜家可以看看曩昔的黑防。然后我們看文本數據庫的問題:

$text1=$_POST["text1"];

$text2=$_POST["text2"];

$text3=$_POST["text3"];

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

fwrite和記娛最好h88285愽娛($fd,"

$text1&line;$text2&line;$text3");

fclose($fd);

文本的破綻可以說是加倍嚴重。假使我們的提交的變量中插入一段很小的PHP代碼,就可以另這個文本數據庫test.php變成PHP后門。以致插入上傳代碼,讓我們可以上傳一個完善的PHP后門。接著提升權限,辦事器便是你的了。

2.破綻辦理:

這個破綻的辦理措施著實很簡單,便是嚴格對整個提交的變量進行過濾。對一些敏感的字符進行調換。我們可以借助PHP供給的htmlspecialchars()函數來調換HTML的內容。這里給出一段例子:

//構造過濾函數

function flt_tags($text)

{

$badwords=array("操你媽","fuck"); //詞匯過濾列表

$text=rtrim($text);

foreach($badwords as $badword) //這里進行詞匯的過濾

{

if(stristr($text,$badword)==true){ die("差錯:你提交的內容含有敏感字眼,請不要提交敏感內容。"); }

}

$text=htmlspecialchars($text); //HTML調換

//這兩行把回車調換為

$text=str_replace("

"," ",$text);

$text=str_replace("

","",$text);

$text=str_replace("&line;","│",$text); //文本數據庫分隔符"&line;"調換為全角的"│"

$text=preg_replace("/s{ 2 }/"," ",$text); //空格調換

$text=preg_replace("/  /"," ",$text); //照樣空格調換

if(get_magic_quotes_gpc()){ $text=stripslashes($text); } //假如magic_quotes開啟,則進行'的調換

return $text;

}

$text1=$_POST["text1"];

$text2=$_POST["text2"];

$text3=$_POST["text3"];

//過濾整個輸入

$text1=flt_tags($text1);

$text2=flt_tags($text2);

$text3=flt_tags($text3);

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

fwrite($fd,"

$text1&line;$text2&line;$text3");

fclose($fd);

這樣,就算進擊者在沒有精確Cookie的環境下提交了admin=true的變量,腳本在今后的判斷中也會把$admin設置為False。這樣就辦理了部分的問題。但因為$admin是變量,假使在今后的其他腳本引用中呈現了破綻使得$admin被從新賦值就會激發新的危急。是以,我們應該應用常量來寄放治理員權限的鑒定。應用Define()語句定義一個admin常量來記錄治理員權限,在此今后若配從新賦值就會掉足,達到保護的目的??匆韵麓a:

$cookiesign="admincookiesign"; //判斷是否Admin的cookie變量

$adminsign=$_COOKIE["sign"];和記娛最好h88285愽娛 //獲取用戶的cookie變量

if($adminsign==$cookiesign)

{

define(admin,true);

}

else

{

define(admin,false);

}

if(admin){ echo "現在是治理員狀態。"; }

值得留意的是,我們應用了Define語句,以是在調用Admin常量時前面不要習氣性的加變量符號$,而應該應用Admin和!admin。

文本數據庫裸露

1.破綻緣故原由:

前面已經說過,因為文本數據庫具有很大年夜的機動性,不必要任何外部支持。加上PHP對文件的處置懲罰能力十分強,是以文本數據庫在PHP腳本中的利用甚廣。以致有幾個很好的論壇法度榜樣便是應用文本數據庫的。但有得必有掉,文本數據庫的安然性也是比其他數據庫要低的。

2.破綻辦理:

文本數據庫作為一個通俗的文件,它可以被下載,就像MDB一樣。以是我們要用保護MDB的法子來保護文本數據庫。把文本數據庫的后綴名改為.PHP。并在數據庫的第一行加入。這樣文本數據庫就會作為一個PHP文件,并且在第一行退出履行。也便是返回一個空頁面,從而達到保護文本數據庫的目的。

這樣,就可以很好地辦理安然和調試方便的抵觸了。而且你還可以花點心思,使差錯提示加倍美不雅以共同網站的風格。不過留意兩點是:

(1)E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING是不會被這個句柄處置懲罰的,也便是會用最原始的要領顯示出來。不過呈現這些差錯都是編譯或PHP內核掉足,在平日環境下不會發生。

(2)應用set_error_handler()后,error_reporting ()將會掉效。也便是所有的差錯(除上述的差錯)都邑交給自定義的函數處置懲罰。

其它有關于set_error_handler()的信息,大年夜家可以參考PHP的官方手冊。

POST破綻

1.破綻緣故原由:和記娛最好h88285愽娛

前面已經說過,寄托register_globals來注冊變量是個不好的習氣。在一些留言本和論壇法度榜樣中,更要嚴格反省得到頁面的要領和提交的光陰距離。以防止注水式發帖和外部提交。我們看一下以下某留言本法度榜樣的代碼:

..和記娛最好h88285愽娛.

$text1=flt_tags($text1);

$text2=flt_tags($text2);

$text3=flt_tags($text3);

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

fwrite($fd,"

$text1&line;$text2&line;$text3");

fclose($fd);

...

很顯著的,假如我們提交網址”post.php?text1=testhaha&text2=testhaha&text3=testhaha”。數據就會被正常寫入文件中。此法度榜樣并沒有檢測變量的濫觴和瀏覽器得到頁面的要領。假如我們向這個頁面重復多次提交,就會起到洪流的感化?,F在也有一些軟件使用這個破綻來在論壇或留言本上發廣告,這是可恥的行徑(我同伙的留言本就在1禮拜內被灌了10多頁,無奈)。

2.破綻辦理:

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

快三平台开户