السلام عليكم ورحمة الله
أريد أن أعرف كيف ممكن أن يساعد Prepare statement في حماية قواعد البيانات وماهي استخداماته مع الأمثلة.
استخدام Prepared Statements هو إحدى السبل التي تساعد في حماية قواعد البيانات من هجمات حقن SQL (SQL Injection)K ,عندما تقوم بتنفيذ استعلام SQL داخل تطبيقك مباشرة باستخدام القيم المدخلة من المستخدم، يمكن أن يتم استغلال تلك الفرصة من قبل المهاجمين لتنفيذ استعلامات SQL ضارة، وPrepared Statements تمنع هذا النوع من الهجمات عن طريق فصل الاستعلام SQL عن البيانات المدخلة وتشفير البيانات بشكل آمن.
ففي حال كنت ترغب في استرداد جميع المستخدمين من قاعدة البيانات، تقوم بالتالي:
SELECT * FROM users;
هنا يمكن للمهاجم إدخال التعليمات البرمجية الضارة في هذا الاستعلام عن طريق كتابة ما يلي:
SELECT * FROM users WHERE username = 'admin' AND password = '; DROP TABLE users; --';
وسيؤدي ذلك الاستعلام إلى حذف جدول المستخدمين.
ولكن في حال استخدمت Prepare statement، فسيبدو الاستعلام كما يلي:
$stmt = $db->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt->bindParam(1, $username); $stmt->bindParam(2, $password); $stmt->execute();
لاحظ تم ربط قيم الاستعلام المتغيرة (اسم المستخدم وكلمة المرور) بقيم ثابتة قبل تنفيذ الاستعلام، مما يجعل من المستحيل على المهاجم إدخال التعليمات البرمجية الضارة في الاستعلام.
وذكرت أن يساعد Prepare statement في منع التلاعب بالبيانات عن طريق تحويل البيانات المدخلة إلى تنسيق آمن قبل تخزينها في قاعدة البيانات، حيث يمكن للمهاجم إدخال ما يلي في حقل الاسم:
'; DROP TABLE users; --';
من أجل إلى إنشاء حقل اسم فارغ في قاعدة البيانات، ولكن عند استخدام Prepare statement، فسيبدو الحقل كما يلي:
'\'; DROP TABLE users; --\';
حيث تم تحويل علامة الاقتباس المزدوجة إلى حرفين أحاديين، مما يجعل من المستحيل على المهاجم تنفيذ التعليمات البرمجية الضارة.
أيضًا تحميك من هجمات القوة الغاشمة، حيث يمكن للمهاجمين استخدام هجمات القوة الغاشمة لمحاولة تخمين كلمة المرور لحساب معين، وقد يؤدي ذلك إلى الوصول غير المصرح به إلى حساب المستخدم.
ففي حال تم تعيين الحد الأقصى لعدد محاولات تسجيل الدخول الفاشلة على 10، فسيتم حظر المستخدم بعد عشر محاولات تسجيل دخول فاشلة.
وإليك بعض الأمثلة الأخرى لاستخدام Prepare statement في حماية قواعد البيانات:
يمكن لـ Prepare statement أن يساعد في حماية قواعد البيانات بعدة طرق، منها:
والتعليق السابق يوضح بالأمثلة هذه الغستخداما السابقة
التعليقات