Thursday, 19 April 2012

ွSQL ထိုးေဖာက္ျခင္း နည္းပညာမွ ကာကြယ္ဖို႕...


ခုေဖာ္ျပထားတာကေတာ့..SQL တုိက္စစ္၇ဲ႕သတိျပဳစရာေလးေတြကိုအနည္းငယ္ေဖာ္ျပေပးတာျဖစ္ပါတယ္..

အဆင့္ျမင့္ SQL နည္းပညာျဖင့္ေဖာက္ထြင္းမႈ႕မ်ားစြာကိုျပဳလုပ္ႏိုင္ပါတယ္...

$result = mysql_query(‘SELECT text FROM pages WHERE id=’ . $_GET['id']);
echo($result);
?>
အေနနဲ႕ေဖာ္ျပထားမည္ဆိုရင္... 
SQL Database အရ......... စာမ်က္ႏွာမွရွိတဲ့ စာေတြကို Select ေပးျခင္းျဖစ္ပါတယ္....
စာမ်က္ႏွာရဲ႕အေၾကာင္းအရာကိုေခါင္းစဥ္အေနနဲ႕ ညာဘက္အျခမ္းမွာ List မ်ားနဲ႕ေဖာ္ျပမည္ဆိုရင္ 
SQL အရ url မွာ  $_GET['id'] နဲ႕ $_GET['id'] လို႕ေဖာ္ျပေလ့ရွိပါတယ္....
ဥပမာ http://www.mmitpro.com/index.php?id=123  code နံပါတ္ျဖစ္ေနလွ်င္လြယ္ကူ
စြာေဖာက္ထြင္းမႈ႕ ျပဳ ႏိုင္ပါတယ္....
အဲလိုျဖစ္ေနခဲ့မည္ဆိုရင္ေတာ့...ဒီလိုပံုစံနဲ႕ SQL Database ကိုျပန္ေျပာင္းျပစ္ပါ.
$result = mysql_query(‘SELECT text FROM pages WHERE id=’ . mysql_real_escape_string($_GET['id']));
echo($result);
?>
လို႕ေျပာင္းလဲတည္ရွိမည္ဆိုရင္ ၁၀၀% လံုျခံဳမႈ႕ရွိပါတယ္...
အဲလိုေျပာင္းျပစ္တာကအလုပ္မလုပ္ဘူးဆိုရင္.... Php code ကိုတစ္ခ်က္ၾကည့္ဖို႕လိုအပ္ပါျပီ
ကြ်န္ေတာ္တို႕ ရဲ႕ pHP code မွာေအာက္ေဖာ္ျပပါပံုစံတည္ရွိေနမည္ဆိုရင္...:
$result = mysql_query(‘SELECT text FROM pages WHERE id=’ . $_GET['id']);
echo($result);
?>
အဲပံုစံဟာလည္းေဖာက္ထြင္းလို႕ရႏိုင္ပါေသးတယ္... 
ထို႕အျပင္ က်ေနာ္တို႕ဟာ.... ေဖာက္ထြင္းမႈျပဳခ်င္တဲ့ $_GET['id']ကိုအျမဲလိုလိုစစ္ေဆးေပးဖို႕လိုအပ္ပါတယ္...
$pos = strrpos(strtolower($_GET['id']), "union”);
if ($pos === false){}else
{
die;
}
$pos = strrpos(strtolower($_GET['id']), "select”);

if ($pos === false){}else
{
die;
}
$pos = strrpos(strtolower($_GET['id']), "information_”);

if ($pos === false){}else

{
die;
}
$result = mysql_query(‘SELECT text FROM pages WHERE id=’ . $_GET['id']);
echo($result);
?>
ေယာင္အဲလင္း
(ဟက္ကင္းနည္းပညာ)