شرح صفوف ومحتوى الفقرة
تُعد ثغرة حقن قواعد البيانات () من أشهر وأخطر ثغرات الخوادم في تاريخ الويب. فكيف تحدث هذه الثغرة مفاهيمياً؟ وكيف يمنعها مطور الواجهة الخلفية بنسبة 100%؟
- الخطأ البرمجي المسبب للثغرة (الدمج النصي المباشر): إذا قام مبرمج بلصق النص الذي كتبه المستخدم مباشرة داخل جملة أمر ، يستطيع المهاجم إدخال علامات تنصيص وعبارات منطقية خبيثة تخدع قاعدة البيانات فتتعامل مع مدخلات المستخدم وكأنها أوامر برمجية تنفذها!
- الحل الجذري الحاسم (الاستعلامات المحضّرة ): تستخدم أطر العمل الخلفية الحديثة ما يُسمى الاستعلامات المحضّرة؛ حيث يرسل الخادم أولاً قالب الأمر إلى قاعدة البيانات مع وضع علامة استفهام () مكان قيمة المستخدم، ثم يمرر مدخلات المستخدم في خطوة منفصلة كبيانات نصية صافية يستحيل أن تنفذها قاعدة البيانات كأمر برمجي.
قارن في المثال التوضيحي الآتي بين الدمج النصي الخطر وبين الاستعلام المحضّر الآمن:
SQL
-- 1. UNSAFE: Gluing raw input directly into SQL text
SELECT * FROM users WHERE email = '$userInput';
-- 2. SAFE: Prepared Statement with ? placeholder
SELECT * FROM users WHERE email = ?;