شبكة تعلم مع ناو

ما أفضل طريقة لمنع هجمات SQL Injection؟

أفضل طريقة: الاستعلامات المجهزة (Prepared Statements).

$stmt = $pdo->prepare('SELECT * FROM products WHERE name LIKE ?');
$stmt->execute(['%' . $_GET['q'] . '%']);

الأمر والقيم يُرسلان منفصلين، فلا يمكن لمدخلات المستخدم أن تتحول إلى أوامر SQL.

لماذا لا تكفي الحلول الأخرى؟

  • strip_tags(): تحذف وسوم HTML، ولا تمنع رموز SQL مثل '.
  • تشفير البيانات: يحمي البيانات المخزنة، لا الاستعلام نفسه.
  • جدار الحماية وحده: قد يلتقط بعض الهجمات، لكن يمكن تجاوزه. هو طبقة إضافية، لا بديل.

ومعها: أعطِ مستخدم قاعدة البيانات أقل صلاحيات يحتاجها.

اختبر نفسك

خمسة أسئلة سريعة، مع الإجابة والشرح بعد كل سؤال.