ثغرة حقن SQL: كيف تعمل وكيف تحمي موقعك منها بشكل نهائي
📑 جدول المحتويات
حقن SQL (SQL Injection) موجود في قائمة OWASP لأخطر ثغرات الويب منذ سنوات. فهمه لا يساعدك فقط على اختبار الأمان، بل يجعلك مطوّراً أفضل يكتب كوداً آمناً. سنشرحه من منظور دفاعي بحت.
⚠️ هذا الشرح لأغراض تعليمية ودفاعية. جرّب فقط على تطبيقاتك الخاصة أو بيئات تدريب مثل DVWA.
كيف تنشأ الثغرة؟
تحدث عندما يبني المطوّر استعلام قاعدة البيانات بدمج مدخلات المستخدم مباشرةً دون تنقية. تأمّل هذا الكود الخطير:
// كود ضعيف — لا تستخدمه أبداً! $sql = "SELECT * FROM users WHERE name = '" . $_GET['name'] . "'";
إذا أدخل المستخدم القيمة التالية في الحقل:
' OR '1'='1
يصبح الاستعلام:
SELECT * FROM users WHERE name = '' OR '1'='1'
والشرط '1'='1' صحيح دائماً، فيُرجع كل المستخدمين! في حالات أسوأ يمكن للمهاجم حذف جداول أو قراءة بيانات حساسة.
أنواع حقن SQL
- المباشر (In-band): تظهر النتائج مباشرة في الصفحة.
- الأعمى (Blind): لا تظهر النتائج، لكن سلوك التطبيق يكشف معلومات.
- المعتمد على الوقت (Time-based): يستنتج المهاجم المعلومة من تأخّر الاستجابة.
الحل النهائي: الاستعلامات المُعدّة (Prepared Statements)
القاعدة الذهبية: لا تدمج مدخلات المستخدم في نص الاستعلام أبداً. استخدم العناصر النائبة (placeholders) ودع قاعدة البيانات تفصل البيانات عن الأوامر:
// كود آمن باستخدام PDO
$st = $pdo->prepare("SELECT * FROM users WHERE name = ?");
$st->execute([$_GET['name']]);
$rows = $st->fetchAll();
هنا تُعامل قيمة name كبيانات بحتة مهما احتوت من رموز، فيستحيل الحقن. هذا الموقع نفسه يستخدم هذا الأسلوب في كل استعلاماته.
طبقات حماية إضافية
- مبدأ الصلاحية الأدنى: امنح مستخدم قاعدة البيانات أقل الصلاحيات اللازمة فقط.
- التحقق من المدخلات: تأكد أن الأرقام أرقام والبريد بريد قبل المعالجة.
- تنقية المخرجات: استخدم
htmlspecialcharsعند العرض لمنع XSS المصاحب. - جدار حماية تطبيقات الويب (WAF): طبقة كشف إضافية.
خلاصة
حقن SQL ثغرة قاتلة لكن الوقاية منها بسيطة: استخدم الاستعلامات المُعدّة دائماً، وطبّق مبدأ الصلاحية الأدنى. اجعل هذه عادة في كل سطر كود تكتبه، وستغلق الباب نهائياً أمام أحد أخطر أنواع الهجمات.
محتوى ذو صلة
كيفية حماية خادم الويب الخاص بك من الهجمات الشائعة
كيف تبني معمل اختراق أخلاقي منزلي (Home Lab) خطوة بخطوة
💬 التعليقات (0)
كن أول من يضيف تعليقاً!
أضف تعليقاً