الرئيسية > السؤال
السؤال
ما هي ثغره الـ SQL؟؟
؟
Google إجابات 24‏/8‏/2011 تم النشر بواسطة ضل القناص (سأقاتل ببندقيتي حتى اخر طلقه).
الإجابات
1 من 2
أظن أنك تقصد (SQL Injection) هو حقن كود استعلام بلغة SQL في النماذج الخاصة بالمستخدم

وعندما يتم تطبيق هذه الاستعلامات في الموقع فإنه يكون محملاً بثغرة تغير مجرى تنفيذ البرنامج

كأن تسمح للمستخدم بالدخول تحت أي كلمة سر بمجرد أن اسم المستخدم صحيح
24‏/8‏/2011 تم النشر بواسطة LordCover (Lord Cover).
2 من 2
في البداية لنتعرف ماذا يقصد بالـ (Sql Injection) وهو عبارة عن حقن كود معين في مدخلات تطبيق الويب على مستوى قاعدة البيانات ليتم الحصول على معلومات غير مصرح للحصول عليها أو التلاعب بمحتويات قاعدة البيانات.

ثغرة الـ Sql Injection تتم بشكل أساسي على جمل لغة sql والتي تستخدم للتعامل مع جميع قواعد البيانات كلها كجمل SELECT , UPDATE , DELETE مثال على ذلك:

select * from users;


أساليب إستخدام ال Sql Injection

تعتمد كل تطبيقات الويب على استقبال المدخلات من قبل المستخدم بواسطة النماذج وهذا ما يتم استخدامه من قبل المخترق وأيضاً يمكن محاولة الإختراق بإستخدام Sql Injection عن طريق عنوان الويب (url) فكيف يكون ذلك؟

سأتانول الآن بعض الأمثلة على الأساليب المستخدمة في الإختراق بإستخدام Sql Injection.

لنتفترض أن لدينا نموذج يطلب من المستخدم ادخال اسم المستخدم وكلمة المرور للدخول إلى النظام وبعد تقديم البيانات يتم استقبال البيانات بإستخدام الكود التالي (الكود بلغة PHP):
sql = “SELECT * FROM `users` WHERE `username` = ‘$_POST[username]’ AND `password` = ‘$_POST[password]’” ;
Mysql_query($sql);
If(mysql_num_rows($result)){
Echo ‘Access Granted’;
}else{
Echo ‘Username of password is wrong’;
}


الكود السابق من ناحية تقنية صحيح 100% ولا يوجد به أي خطأ ولكن المشكلة تكمن في أنه ليس صحيح من الناحية الأمنية.

تخيل معي أنك قمت بإدخال التالي:
في خانة اسم المستخدم أدخلت admin وفي خانة كلمة المرور أدخلت التالي: (‘or 1=1;--) مالذي سيحدث؟؟؟

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

$sql = “SELECT * FROM `users` WHERE `username` = ‘admin’ AND `password` = ” or 1=1;--’” ;

الآن هل استوعبتم ما حصل. هذه الجملة صحيحة وبذلك سوف أتمكن من الدخول وذلك بسبب OR التي يتبعها عبارة 1=1 والتي دوماً هي صحيحة مهما كانت المدخلات و -- لتجاهل كل شيء بعدها.

كان هذا واحد من الأمثلة التي يستخدمها المخترقون لمحاولة تخطي صفحة الدخول ولكن أيضاً هناك أِكال آخرى فأحياناً يستخدم المخترقون Sql Injection لمحاولة عرض معلومات من قاعدة البيانات.

تصور معي المثال التالي:

Select * From `topics` WHERE `id` = ‘.$_POST['id']


كثير من المواقع تستخدم الشكل التالي للعنوان لعرض الأخبار أو المقالات:

site.com/topics.php?id=1


لنتلاعب بذلك قليلاً. ما رأيك لو أضفنا جملة sql على هذا العنوان بإستخدام خاصية UNION ليصبح كالتالي:

site.com/topics.php?id=1 union select 1,2,3 from users;


لنرى كيف ستصبح جملة sql عند تنفيذها في الكود السابق:

Select * From `topics` WHERE `id` = 1 union select 1,2,3 from `users`;


الذي سيحدث بعد تنفيذ الجملة هو عرض معلومات المستخدمين في هذه الصفحة (طبعاً استعضنا بالأرقام 1 و2 و3) لأننا لا نعرف اسماء الحقول.

هذا سيء طبعاً فلقد أًصبحت معلومات المستخدمين للموقع مكشوفة ولكن لنفترض أن المخترق اللاحق لديه ميول تخريبية تخيل أنه كتب التالي في العنوان:

site.com/topics.php?id=1;DROP TABLE users;


لك أن تخمن مالذي سيحدث.

بالطبع الأمر ليس بهذه السهولة المطلقة فالصعوبة التي تواجه المخترقين هي معرفة أسماء الجداول أو تخمينها أو معرفة أسماء الحقول ولهذه عدة طرق بالإمكان شرحها في مقالة آخرى مستقبلاً.

الآن وبعد أن تعرفنا على طرق الإختراق بإستخدام Sql Injection يتبادر إلينا السؤال التالي وهو كيف نحمي مواقعنا وبرامجنا التي نبرمجها بأي لغة ويب كانت سواء (PHP أو ASP ... إلخ) من هذه الثغرة.

هناك عدة طرق لذلك وسأختصرها في نقاط:

1- قم بلفترة جميع المدخلات سواء التي تأتي من GET أو POST أو حتى الـ AJAX أو متغيرات العنوان (url parameters).
2- قم بإغلاق تقرير الأخطاء ولا تجعل المخترق يستفيد منه للحصول على بعض المعلومات كأسماء الجداول أو الحقول أو غيرها.
3- قم بإستخدام اسماء للجداول والحقول غير شائعة.
4- حاول عدم اعطاء الصلاحيات الكاملة لمستخدم قاعدة البيانات إلا اذا كانت هناك حاجة لذلك.

help.dw@msn.com‏
24‏/8‏/2011 تم النشر بواسطة mezo221144 (مازن بدرية).
قد يهمك أيضًا
اين أجد رابط تحميل SQL server 2003 ؟؟
ما هو الصطلح العلمى الذى اختصاره SQL ?
ماهي طريقة الدخول ل sql plus?
السلام عليكم ورحمة الله وبركاته لو سمحتو خبراء sql server تفضلو جاوبوني
ما هي ال microsoft visual basic
تسجيل الدخول
عرض إجابات Google في:: Mobile | كلاسيكي
©2014 Google - سياسة الخصوصية - مساعدة