السلام عليكم ورحمة الله تعالى وبركاته
اليوم معنا درس في كيفيت
تجنب الحقن السكويل في الموقع
- تعريف الحقن الاسكويل : ثغرات الاسكويل تعد من أخطر و أكثر الثغرات شيوعا في المواقع التي تدعم لغة php
- في هدا الدرس سنشرح مبدأ الحقن sql , وكيفية تجنبه
- ادن ثغرات السكويل هي ثغرات جد كبيرة و خطيرة على المواقع , و خصوصا ادى كان الموقع فضاء للأعضاء كالمنتدى مثلا , أو موقع فيه معلومات عن الأدمن و اليوزرس
و طبعا تكون قاعدة البيانات MYSQL
أنا هنا قلت MYSQL لأنه توجد عدة قواعد بيانات ك: oracle , sqlite , postgreSQL ,microsoft SQL server ...... سوف أتطرق لشرحها في دروس قادمة
المهم حتى نبدأ الدرس لازم تكون عندك دراية كافية بلغة php و تعرف كل شئ عنها
طرح المشكل
-يوجد نوعان من
الحقن sql :
- الحقن عن طريق المتغيرات التي تحتوي على سلاسل من أوامر الطباعة
- الحقن عن طريق المتغيرات الرقمية
- المتغيرات التي تحتوي على سلاسل الطباعة
- نفترض انه لدينا سكربت php الدي سبيحث مثلا عن عمر عضو بوظيفة اليوزر
هدا اليوزر مر من صفحة لأخرى عن طريق الرابط l'URL عبر GET_$
مثال لسكريبت :
كود PHP:
<?php ... $pseudo = $_GET***91;'user'***93;; $requete = mysql_query("SELECT age FROM membres WHERE user='$user'"); ...
- ادن اعلموا على ان هدا السكربت هو ثغرة كبيرة للحقن sql
- يكفي للهكر أن يضع في الرابط l'URL طلب مثل هدا :
كود:
' UNION SELECT password FROM membres WHERE id=1
- بهدا الطلب الهكر هنا يريد الحصول على الباسورد للعضو الدي يحمل الايدي واحد id=1
- لن أتعمق أكثر هنا أعطيتكم مجرد توضيح عن الكيفية
طريقة حماية السكربت
- لحماية هدا النوع من
الحقن يكفي اضافة الوظيفة
mysql_real_escape_string()
- اها طب كيف تعمل و ماهي وظيفتها ؟
-- هده الوظيفة تضيف طباعة "/" الى الطباعات التالية :
كود:
NULL, \x00, \n, \r, \, ', " et \x1a
- اوكي , في مادا تصلح ؟
-- مثلما لاحظتم في
الحقن السابق الهاكر استعمل الاستعلامة ' لكي يخرج ما يحيط ب user$ ادى نحن منعناه من عمل هدا فلن يستطيع
الحقن
ادن نستخلص اننا بستعمالنا mysql_real_escape_string() نكون قد فعالنا الحماية للطلب الدي يريده الهاكر
-تطبيق:
كود PHP:
<?php ... $user = mysql_real_escape_string($_GET***91;'user'***93;); $requete = mysql_query("SELECT age FROM membres WHERE user='$user'"); ...
بتدقيق :
الهاكر يعطي أمر هكدا
كود:
' UNION SELECT password FROM membres WHERE id=1
نحن باستعمالنا ل mysql_real_escape_string() يصبح طلب الهاكر هكدا
كود:
\' UNION SELECT password FROM membres WHERE id=1
مما يعني انه لا يستطيع استخراج user$ بما ان "/" قد أضيفت
ملحوظة : توجد وظيفة أخرى
تستعمل في PHP 4.3.9 مع magic_quotes_gpc يكون مفعلا
- انتهينا من الشرح في :
- الحقن عن طريق المتغيرات التي تحتوي على سلاسل من أوامر الطباعة
-- في الدرس التاني سوف نرى الاستغلال و الحماية في المتغيرات الرقمية
- الحقن عن طريق المتغيرات الرقمية
تم الشرح من طرف
ReD-HaT
الى اللقاء في الدرس القادم و في شروحات أخرى ان شاء الله
تحياتي للجميع
j[kf hgprk ([.x 1) sQL Injection