أفضل طريقة: الاستعلامات المجهزة (Prepared Statements).
$stmt = $pdo->prepare('SELECT * FROM products WHERE name LIKE ?');
$stmt->execute(['%' . $_GET['q'] . '%']);
الأمر والقيم يُرسلان منفصلين، فلا يمكن لمدخلات المستخدم أن تتحول إلى أوامر SQL.
لماذا لا تكفي الحلول الأخرى؟
strip_tags(): تحذف وسوم HTML، ولا تمنع رموز SQL مثل'.- تشفير البيانات: يحمي البيانات المخزنة، لا الاستعلام نفسه.
- جدار الحماية وحده: قد يلتقط بعض الهجمات، لكن يمكن تجاوزه. هو طبقة إضافية، لا بديل.
ومعها: أعطِ مستخدم قاعدة البيانات أقل صلاحيات يحتاجها.