ما هو حقن SQL (SQL Injection)؟
ثغرة خطيرة: مهاجم يُدخل كود SQL عبر حقول التطبيق ليتلاعب بالاستعلام.
الكود الخطير
"SELECT * FROM users WHERE name = '" + input + "'"
لو أدخل المستخدم ' OR '1'='1 يصبح الشرط دائمًا صحيحًا ويكشف كل الصفوف.
الوقاية: الاستعلامات المُعدّة (Prepared Statements)
افصل الكود عن البيانات — هذه القاعدة الذهبية:
// PHP / PDO
$stmt = $pdo->prepare('SELECT * FROM users WHERE name = ?');
$stmt->execute([$input]);
// Node.js
db.query('SELECT * FROM users WHERE name = $1', [input]);
قاعدة البيانات تعامل $input كقيمة فقط، لا كأمر — فيُبطَل الحقن تمامًا.
مبادئ أمان إضافية
- أقل صلاحية: امنح حساب التطبيق ما يحتاجه فقط.
- تحقّق من المدخلات على مستوى التطبيق أيضًا.
- لا تعرض رسائل خطأ SQL للمستخدم النهائي.
- شفّر البيانات الحسّاسة وخزّن كلمات المرور كـ hash.
الصلاحيات GRANT و REVOKE
GRANT SELECT, INSERT ON shop.* TO 'app_user'@'localhost';
REVOKE DELETE ON shop.* FROM 'app_user'@'localhost';
⚠️ حقن SQL من أشهر أسباب اختراق المواقع — استخدم الاستعلامات المُعدّة دائمًا.
🎯 التالي: الإجراءات المخزّنة والمشغّلات.