المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : شريح تحصين مشروعك او برمجيتك من ثغرات sql injection



salima
11-01-2013, بتوقيت غرينيتش 03:48 PM
http://www.dzbatna.com/images/icons/iconrote.gif ط´ط±ظٹط* طھط*طµظٹظ† ظ…ط´ط±ظˆط¹ظƒ ط§ظˆ ط¨ط±ظ…ط¬ظٹطھظƒ ظ…ظ† ط«ط؛ط±ط§طھ sql injection (http://www.dzbatna.com/t1657445/)



السلام عليكم ورحمة الله





شريح تحصين مشروعك او برمجيتك من ثغرات sql injection







لديا بعض الطروق بدون استخدام اي داله وراح اطرحها لكم http://www.dzbatna.com/images/smilies/cupidarrow.gif
خطاء يقع فيه المبرمجين
مثال


رمز PHP:

<code style="white-space:nowrap"> <code> $sql=mysql_query("select * from news where id=$id ");
while($r=mysql_fetch_array($sql))
</code> </code>




لو شاهدنا هذا الجزء

رمز PHP:

<code style="white-space:nowrap"> <code> where id=$id
</code> </code>



لوجدنا بأنه يوجد ثغره sql injection
ويمكن الإستعلام من خلال متغير id بدون اي مشاكل

فالحل هنا
اضافة تنصيص مفرد
بهذا الشكل


رمز PHP:

<code style="white-space:nowrap"> <code> $sql=mysql_query("select * from news where id='$id' ");
while($r=mysql_fetch_array($sql))
</code> </code>




وطبعا هذه عن تجربة بكذا أنتهيت من الثغره بأبسط الطرق
الطريقة الثانية
عن طريق داله intval



رمز PHP:

<code style="white-space:nowrap"> <code> $id=intval($_GET&#91;'id'&#93;;
$sql=mysql_query("select * from news where id='$id' ");
while($r=mysql_fetch_array($sql))
</code> </code>




وظيفة الداله اخذ عدد رقمي فقط والغاء اي نص اضافي

وهادا راح يقبل جميع الحروف و لارقام و عند لاستعلام لا يقبل اي فاصلة ولكن يضهر بشكل عادي عند العرض



رمز PHP:

<code style="white-space:nowrap"> <code> $id=$_GET&#91;'id'&#93;;
$id2 = str_replace("'", "",$id);
$ww22=mysql_query("select * from news where id='$id2' ");
while($r=mysql_fetch_array($ww22))
{
echo $id:
}
</code> </code>




راح اشرح طريقةها
داله str_replace وظيفتها استبدال النصوص بنصوص اخرى
مثال لو كتب احدهم كلمه ممنوعه .. تتحول تلقائي الى *****



رمز PHP:

<code style="white-space:nowrap"> <code> $id= "test ray test";
echo $id2 = str_replace("ray", "***",$id);
</code> </code>




النتيجة
test *** test



رمز PHP:

<code style="white-space:nowrap"> <code> $id2 = str_replace("'", "",$id);
</code> </code>




لاحظ الكلمة الممنوعه هي '
واستخدمها فقط عند الإستعلام where
وعند العرض استخدم المتغير الغير معدل
كمان فى طريقة
اولاً دالة للحماية من الروابط الخارجية
$_GET



رمز PHP:

<code style="white-space:nowrap"> <code> function safe($num){
$num = intval($num) ;
$num = str_replace("-","",$num);
return $num;
}
</code> </code>




ودوال اثنين للحماية من الحقن الداخلي



رمز PHP:

<code style="white-space:nowrap"> <code> function safe_input($string){
$badword = array(
'select' => '&badwordseselect',
'insert' => '&badwordseinsert',
'drop' => '&badwordsedrop',
'where' => '&badwordsewhere',
'or' => '&badwordseor',
'and' => '&badwordseand',
'delete' => '&badwordsedelete',
'update' => '&badwordseupdate',
'in' => '&badwordsein',
'like' => '&badwordselike',
'set' => '&badwordseset',
'between' => '&badwordsebetween',
'join' => '&badwordsejoin',
'union' => '&badwordseunion',
'into' => '&badwordseinto',
'create' => '&badwordsecreate',
'unique' => '&badwordseunique',
'alter' => '&badwordsealter',
'from' => '&badwordsefrom'
);

foreach ($badword as $bad => $good ){
$string = str_replace($bad, $good, $string);
}
</code> </code>




الدالة اعلاه تستعمل لتنظيف السترينج قبل ادخاله الى الكويري
والدالة الثانية تستعمل في طباعة المخرجات
اي عند عرض النتائج
وهذه الدالة ايضاً للحماية
دالة Addslashes



رمز PHP:

<code style="white-space:nowrap"> <code> function adds($string){
if (get_magic_quotes_gpc() !== true){
return $sec = addskashes($string);
}
وبخصوص ال
stripslashes
مو مشكلة عملت هذه
function strip($strings){
$sec = str_replace("\'","'",$strings);
return $sec;

}
</code> </code>





ملاحظة : فكرة الدالة

والدالة
safe_input safe_output
مثل فكرة الدالتين
addslashes stripslashes
و
سهلة وما اعتقد تحتاج الى شرح طريقة وانشاء الله يكون حلي صحيح





التعديل الأخير كان بواسطة خطوة للأمام; 31 - 08 - 2014 الساعة 02:54

ألعاب الأندرويد مجانا و حصريا (http://www.apotox.info/forum)




https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash4/482113_236967293114455_1193518507_n.png (http://www.dzbatna.com)
©المشاركات المنشورة تعبر عن وجهة نظر صاحبها فقط، ولا تُعبّر بأي شكل من الأشكال عن وجهة نظر إدارة المنتدى (http://www.dzbatna.com)©

استعمل مربع البحث في الاسفل لمزيد من المواضيع


سريع للبحث عن مواضيع في المنتدى