تخطَّ إلى المحتوى

🛡️ شرح الأمن السيبراني

الحماية من حقن SQL

الدرس 9 من 25· ⏱ 1 دقائق قراءة

📚 محتوى دفاعي بحت: الهدف منع الثغرة في كودك.

كيف تحدث (مفهوميًّا)

تحدث عندما يُدمَج إدخال المستخدم مباشرة في نصّ استعلام SQL عبر ربط النصوص (string concatenation)، فيتمكّن مدخل خبيث من تغيير منطق الاستعلام.

// ❌ خطر: ربط مباشر لمدخل المستخدم
db.query("SELECT * FROM users WHERE name = '" + userInput + "'");

المشكلة: المُدخَل يصبح جزءًا من الأمر بدل أن يكون مجرّد بيانات.

الحلّ 1: الاستعلامات المعاملية (الأهمّ)

افصل الأمر عن البيانات — تُعامَل المدخلات كقيم لا كأوامر:

// ✅ آمن: معاملات (placeholders)
db.query("SELECT * FROM users WHERE name = ?", [userInput]);
# Python
cursor.execute("SELECT * FROM users WHERE name = %s", (user_input,))

الحلّ 2: استخدم ORM

أدوات مثل Drizzle و Prisma و Django ORM تستخدم استعلامات معاملية تلقائيًّا:

User.objects.filter(name=user_input)   # آمن

دفاعات إضافية

  • التحقّق من المدخلات (النوع، الطول، الصيغة).
  • أقلّ صلاحية لمستخدم قاعدة البيانات.
  • لا تكشف رسائل أخطاء SQL للمستخدم.

💡 القاعدة الذهبية: لا تبنِ استعلامات بربط نصوص المستخدم — استخدم المعاملات أو ORM دائمًا.

🎯 التالي: الحماية من XSS.

هل كان هذا الدرس مفيدًا؟