العودة إلى الدورة

مقدمة لأمن الويب: منع حقن SQL (العبارات المُعدَّة)

PHP: الدورة التدريبية المكثفة الكاملة من الصفر إلى الاحتراف

49. مقدمة لأمن الويب: منع حقن SQL

حقن SQL هي واحدة من أكثر الثغرات الأمنية شيوعًا وخطورة. تحدث عندما يدخل المهاجم كود SQL ضارًا في نموذج ويب، والذي يتم تنفيذه بعد ذلك بواسطة قاعدة البيانات.

الثغرة الأمنية (الضم)

تخيل أن مهاجمًا يدخل هذا في حقل اسم المستخدم لنموذج تسجيل الدخول: ' OR 1=1 --

إذا قمنا بضم هذا مباشرة، يصبح استعلام SQL الناتج:

sql SELECT * FROM users WHERE username = '' OR 1=1 --' AND password = '...'

يتحول -- إلى تعليق لبقية الاستعلام، وتكون OR 1=1 صحيحة دائمًا، مما يمنح وصولاً غير مصرح به.

الحل: العبارات المُعدَّة (الربط)

تضمن العبارات المُعدَّة أن يتم التعامل مع مدخلات المستخدم على أنها بيانات فقط، وليست كود SQL قابل للتنفيذ أبدًا. يتولى PDO فصل هذا الأمر نيابةً عنك.

غير آمن (تجنب!):

php $user_input = $_POST['username']; // خطير: ضم المدخلات مباشرة $sql = "SELECT * FROM users WHERE username = '$user_input'";

آمن (استخدم PDO):

php

prepare($sql); // 2. تضمن دالة الربط أن يتم التعامل مع user_input كقيمة نصية $stmt->bindParam(':user_input', $user_input); $stmt->execute(); // إذا أدخل المهاجم ' OR 1=1 --، فستبحث قاعدة البيانات عن مستخدم // يساوي اسم مستخدمه حرفيًا النص "' OR 1=1 --"، مما يفشل. ?>

قاعدة حاسمة: لا تثق أبدًا بمدخلات المستخدم. استخدم العبارات المُعدَّة لكل استعلام قاعدة بيانات يتضمن بيانات خارجية.