أهم أقسام المدونة

الصفحات

الخميس، 19 يناير 2017

دس الاستعلامات SQL Injection


دس الاستعلامات SQL Injection:

في المثال السابق، سمحنا للمستخدم بكتابة اسم المؤلف في مربع نص، ثم أدرجنا محتوى النص داخل جملة الاستعلام كجزء من شرط الفقرة WHERE.. وقد تفتق ذهن بعض العباقرة عن فكرة شريرة، وهي كتابة بعض جمل الاستعلام في مربع النص بدلا من اسم المؤلف، وبهذا يستطيعون حقن استعلامات مدسوسة خاصة بهم داخل جملة الاستعلام الخاصة بك، فيقوم برنامجك بتنفيذ ما يريدون على قاعدة البيانات، وهو أمر يشبه سلوك الفيروسات التي تحقن مادتها الوراثية في نواة الخلية وتتركها تنفذها لإنتاج فيروسات جديدة!

وخطورة هذه الطريقة، هي أنها تتيح للمخترقين الاستعلام عن بعض حسابات المديرين والمستخدمين، ومعرفة تركيب الجداول، بل وتنفيذ بعض أوامر غلاف الويندوز Shell من خلال خادم سكيويل، ما قد يضر بالجهاز الذي يعمل عليه الخادم!

ولكن كيف تتم عملية الحقن Injection؟

1- أول شيء، يتوقع القرصان Hacker ضرورة وجود النص بين علامتي تنصيص، ولا بد أنك وضعت علامة تنصيص بادئة قبل النص الذي سيأتي من مربع النص، لهذا يجب على المخترق أن يكتب أي كلمة، ثم يتبعها بالعلامة ' لإغلاق علامتي التنصيص، وبهذا يضمن عدم حدوث خطأ في صيغة جملة SQL.

2- بعد هذا يضع القرصان فاصلة منقوطة ; ليستطيع كتابة أمر SQL جديد خاص به، وهنا تكون لديه الحرية في كتابة الأمر الذي يريده!

3- نظرا لأن القرصان يتوقع منك إضافة تكملة لجملة SQL بعد النص الذي كتبه في مربع النص، فإنه يضع في نهاية الكود المدسوس الرمز -- ليجعل أي نص تال له مجرد تعليق، وبهذا يلغي أي تكملة خاصة بك لجملة الاستعلام، ويضمن سلامة صيغة جملة الاستعلام!

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

Ahamd'; drop table Books--

في هذه الحالة ستصبح جملة الاستعلام بعد إضافة هذه الجملة كالتالي:

SELECT Books.Book

FROM Authors, Books

WHERE Authors.ID = AuthorID

AND Authors.Author = 'Ahamd'; drop table Books--'

كما ترى: صار لدينا استعلامان صحيحان وتعليق:

- الاستعلام الأول لا قيمة له، وهو  يبحث عن كتب مؤلف اسمه Ahmad.

- والاستعلام الثاني أمر حذف يطلب حذف جدول الكتب كاملا من قاعدة البيانات.. لاحظ أن القرصان لا يعرف أسماء الجداول، ولكنّ توقع اسم جدول الكتب لن يكون عسيرا، ولن ييأس القرصان من تجربة عشرات الأسماء المحتملة، ما دام عزمه قد قرّ على تدمير برنامجك!

- وفي النهاية يوجد تعليق صغير، هو العلامة ' الخاصة بك، والتي استطاع القرصان تهميشها بحيلة صغيرة بارعة!

يبدو الأمر مفزعا، أليس كذلك؟

إن هذه الثغرة تتيح للقراصنة تدمير قاعدة البيانات، ودخول حسابات المستخدمين، دون الحاجة إلى كتابة اسم المستخدم أو كلمة المرور، والكثير من الكوارث التي تكفي لتطير النوم من عيون المبرمجين J.

فكيف إذن يمكن إغلاق هذه الثغرة القاتلة؟

هذا ما سنتعرف عليه في الموضوع التالي.

 

من كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:


 

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.