شرح صفوف ومحتوى الفقرة
تُعد ثغرة حقن قواعد البيانات (SQL Injection — SQLi) من أخطر الثغرات الأمنية في هندسة البرمجيات على الإطلاق؛ وتنشأ عندما يقوم المبرمج ببناء جملة SQL عبر دمج نص المدخلات الواردة من المستخدم مباشرةً داخل نص الاستعلام بدلاً من فصل الكود عن البيانات:
- الخلط الكارثي بين أوامر SQL وبيانات المستخدم: عندما يكتب التطبيق جملة نصية مدمجة مثل
"SELECT * FROM users WHERE email = '" + input + "'"، فإن محلل خادم MySQL لا يستطيع التمييز بين الكود الذي كتبه المبرمج وبين النص الذي أدخله الزائر. - كسر علامات التنصيص: إذا أدخل المهاجم علامة تنصيص مفردة (
') متبوعة بأوامر منطقية مثلORأوUNION SELECTأو رمز التعليق (--)، فإن نص المستخدم يخرج من كونه بيانات نصية ليتحول إلى أوامر SQL فعلية ينفذها الخادم! - المدخلات الرقمية معرضة للحقن أيضاً: حتى بدون علامات تنصيص، فإن دمج معرّف رقمي غير مفحوص مثل
105 OR 1=1داخلWHERE id = ...يحقن شرطاً منطقياً كاملاً.
-- الاستعلام الطبيعي المقصود:
SELECT id, total_usd FROM orders WHERE order_code = 'ORD-500';
-- الاستعلام بعد تشويهه بدمج النصوص المباشر:
SELECT id, total_usd FROM orders WHERE order_code = '' OR 1=1;
SQL
-- Safe intended lookup for a single customer order:
SELECT id, customer_id, total_usd
FROM orders
WHERE order_code = 'ORD-500';
-- What happens when untrusted input "' OR '1'='1" is concatenated directly:
SELECT id, customer_id, total_usd
FROM orders
WHERE order_code = '' OR '1'='1';