مشاهدة البلوقز   المحررين  سجل كمحرر  دخول المحررين  تسجيل الخروج()  أضف مقالة  مقالاتي
Search     بحث متقدم
 »  الرئيسية  »  أمن المعلومات  »  الـ SQL Injection ، سلاح الدمار الشامل ضد تطبيقات الويب
الـ SQL Injection ، سلاح الدمار الشامل ضد تطبيقات الويب
بواسطة Binary Tree | نُشِر  05/11/2005 | أمن المعلومات | تقييم:
ما هي مخاطر الـ SQL Injection
مخاطر الـ SQL Injection تتنوع بحسب وظائف التطبيق نفسه ، فعلى سبيل المثال لنفترض أن لدينا موقع لتسجيل الطلاب و الإستعلام عن درجاتهم و مستوياتهم ، يمكن القيام بما يلي عن طريق الـ SQL Injection :

1- الإستعلام عن درجة طالب بدون معرفة كلمة المرور الخاصة به !!

2- حذف سجل طالب أو مجموعة من الطلاب

3- حذف جدول كامل من قاعدة البيانات

4- إدراج سجل جديد في قاعدة البيانات

5- إكتشاف مسميات الجداول و تركيب و بنية قاعدة البيانات عن طريق التجربة

6- التعديل بمحتوى سجل محدد و تغيير بياناته !!

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

مثال على أمر يقوم بسحب البيانات عن طريق أمر SQL مدمج :

SELECT Id,Title,Abstract FROM News WHERE Category=1 UNION SELECT 1,UsrName,Passwd FROM Usr 


الجزء الملون من الإستعلام هو المتغيير الممرر الى البرنامج ، حيث يقوم المخترق في هذا المثال بتمرير أمر SQL آخر وظيفته جلب إسم المستخدم و كلمة المرور من الجدول Usr ، الأن أصبح المخترق قادر على رؤية أسماء المستخدمين و كلمات مرورهم جميعها ... هل لك أن تتخيل ذلك ؟؟؟


مثال على أمر يقوم بإدراج بيانات مستخدم جديد : 

SELECT email, passwd, login_id, full_name
  FROM members
 WHERE email = 'x';
        INSERT INTO members ('email','passwd','login_id','full_name')
        VALUES ('btree@devhall.com','hello','Btree','Binary Tree');--
'; 



الجزء الملون يوضح المتغير الذي مرره المخترق الى النظام كقيمة للحقل email الذي من المفترض كقيمة نظامية أن يحتوي على بريد إلكتروني و ليس على إستعلام SQL كما فعل هذا المخترق في المثال السابق ، هذه الشيفرة التي أضافها المخترق تقوم بإضافة عضو جديد الى الموقع بالبيانات المذكورة !!!


مثال يقوم بحذف جدول كامل من قاعدة البيانات !!

SELECT fieldlist
  FROM customers
 WHERE name = 'Binary Tree';


الشيفرة السابقة تعمل بشكل سليم و نظامي ، حيث تم تمرير قيمة Binary Tree للمتغير في حقل name ، لكن تخيل لو قام المخترق بالتالي :

SELECT fieldlist
  FROM customers
 WHERE name = '\''; DROP TABLE users; --';


لو قام المستخدم بإدخال العبارة الملونة بالأحمر في حقل الإسم ، هذا يعني أن جدولا بأكمله سيتم حذفه من قاعدة البيانات !! كارثة اليس كذلك ؟


أعتقد أن هذه الأمثلة كافية لإيقاظ المبرمجين الغافلين عن المخاطر الفعلية وراء مدخلات المستخدمين

تعليق
  • تعليق #1 (إضيف من قبل mustafa)
    تقييم
    في البداية مشكور على هذا المقال الجيد ... عندي استفسار بخصوص الحلول إلي ذكرتها وهي بالتحديد ----------- 3- عطل خاصية الإستعلامات المتداخلة Nested Queries في نظام قواعد البيانات الذي تستخدمه ----------- لو ممكن توضح اكثر شو تقصد بالـNested Queries وكيف يتم تعطيلها وفوائدها بالاساس ، لانه لو مالها داعي أو لا تشكل مشكلة في نظام قواعد البيانات في بالتالي ممكن نتغني عنه واسف على الاطالة واشكرك مره اخرى
     
  • تعليق #2 (إضيف من قبل Binary Tree)
    تقييم
    شكرا جزيلا لمشاركتك أخي العزيز ، فيما يخص الـ Nested Queries فيقصد بها أمر UNION في إستعلام الـ SQL ، الذي يقوم بتنفيذ أمري SQL في إستعلام واحد ، فيما يخص طريقة التعطيل فهذا راجع الى كل نظام قاعدة بيانات ، من تجربتي في الـ MySQL ، هذه الخاصية تكون معطلة إفتراضيا ، ولا يمكن تمرير إستعلامين منفصلين دفعة واحدة كإستعلام واحد ، اما في بقية أنظمة قواعد البيانات مثل MSSQL SERVER و ORACLE فليس لدي علم لأني لم أجرب التطبيق عليها . تحياتي
     
  • تعليق #3 (إضيف من قبل مستخدم غير معروف)
    تقييم

     
  • تعليق #4 (إضيف من قبل مستخدم غير معروف)
    تقييم
    Barakallahou feeka ya akhee wa jazaakaa kolla khayren
     
  • تعليق #5 (إضيف من قبل مستخدم غير معروف)
    تقييم

     
  • تعليق #6 (إضيف من قبل ة ا ة)
    تقييم
    جزاك الله الفردوس الاعلى
     
  • تعليق #7 (إضيف من قبل مستخدم غير معروف)
    تقييم

     
  • تعليق #8 (إضيف من قبل مستخدم غير معروف)
    تقييم
    مشكور
     
  • تعليق #9 (إضيف من قبل مستخدم غير معروف)
    تقييم

     
  • تعليق #10 (إضيف من قبل مستخدم غير معروف)
    تقييم
    بارك الله بك وبعلمك وقريباً إن شاء الله سوف أضع مقالات علمية في هذا الموقع المميز
     
  • تعليق #11 (إضيف من قبل mohamad)
    تقييم
    سلام
     
  • تعليق #12 (إضيف من قبل مستخدم غير معروف)
    تقييم

     
  • تعليق #13 (إضيف من قبل مستخدم غير معروف)
    تقييم

     
  • تعليق #14 (إضيف من قبل Tariq Shadid)
    تقييم
    hello there this example is very bad coz it is impossible to happen in php and mysql coz when u enter (') to input text the php add slash like '
     
  • تعليق #15 (إضيف من قبل sam)
    تقييم
    مقال رائع جزاك الله خير
     
  • تعليق #16 (إضيف من قبل مستخدم غير معروف)
    تقييم
    مشكور
     
أضف تعليق


خيارات المقالة
مقالات مشهورة
محررين مشهورين
  1. Binary Tree
  2. SOAP Me
  3. The Byte
  4. هاني الزيد
  5. عبدالرحمن محمد

لم يتم العثور على محررين مشهورين
مواقع صديقة
إعلانات نصية