مخاطر الـ 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; --';
لو قام المستخدم بإدخال العبارة الملونة بالأحمر في حقل الإسم ، هذا يعني أن جدولا بأكمله سيتم حذفه من قاعدة البيانات !! كارثة اليس كذلك ؟
أعتقد أن هذه الأمثلة كافية لإيقاظ المبرمجين الغافلين عن المخاطر الفعلية وراء مدخلات المستخدمين