حقن قاعدة البيانات
أشهر ثغرة في التاريخ: كيف نصبح نص الإدخال أمرًا، ولماذا ما بتموت.
الموقع بيكتب أمر لقاعدة البيانات. لو نصّك بيشارك في بناء الأمر، ممكن تحوّل نصّك لأمر. هاد كل الحكاية.
-- الكود الغلط:
query = "SELECT * FROM users WHERE name='" + name + "'";
-- تكتب في الخانة: ' OR '1'='1
SELECT * FROM users WHERE name='' OR '1'='1'
-- '1'='1' دايمًا صحيح → يرجع كل الصفوفالأنواع الثلاثة
- المباشر: الرد يطلعلك على الشاشة (خطأ، جدول، 'مرحبا'.)
- العمياء (blind): ما يطلعلك شي، بس تتأكد بالوقت أو بـ صح/غلط.
- الاتحاد (union): تطلب من قاعدة البيانات تلحق نتيجتها بنتيجتك.
ما تجرّب هاد على موقع حقيقي إلا لو عندك إذن مكتوب. حتى 'اختبار بسيط' على موقع غير مسموح = جريمة في الإمارات وفي معظم الدول.
العلاج: لا تدمج نص، بل تمرّر بارامترات
// آمن: القاعدة بتعامل النص كبيانات، مش كأمر
db.query('SELECT * FROM users WHERE name = $1', [name]);والتخفيف الثاني: أقل صلاحية لقاعدة البيانات. حساب الموقع ما إلوش سبب يكون admin. كذا، حتى لو نجح الحقن، الضرر محدود.
خلّينا نطبّق خطوة بخطوة
سنجرب باب دخول وهمياً يخلط ما تكتبه بأمر البحث عن المستخدم.
بكلمات بسيطة: الاستعلام: سؤال يرسله الموقع إلى سجل المستخدمين. الحقن: تحوّل جزء من كتابتك من بيانات إلى أمر بسبب خطأ في البناء.
الخطوة 1 من 3
اترك اسم المستخدم كما هو، واكتب كلمة عادية في كلمة السر ثم اضغط «دخول».
ليش؟ نبدأ بتجربة عادية لنقارنها بالتجربة التالية.
شو لازم تشوف؟ ترى رسالة «دخول مرفوض».
اختبار سريع
اقرأ السؤال واضغط الإجابة التي تراها صحيحة. يظهر تحتها سبب الإجابة؛ وإذا أخطأت، اقرأ السبب وغيّر اختيارك. يُسجّل الدرس مكتملًا عندما تصح كل إجاباتك.
أيش العلاج الجذري لحقن SQL؟
' OR '1'='1 أيش بيعمل؟