كيفية منع حقن SQL في PHP؟ (دليل كامل)
مرحباً بالجميع! أنا مطور PHP مبتدئ، وقد واجهت مشكلة خطيرة في الأمان. أكتب نموذج تسجيل دخول بسيط للموقع، ويبدو الكود الخاص بي كالتالي:
```php
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = mysqli_query($conn, $query);
```
أعلم أن هذا غير آمن بشكل فظيع، لكنني لا أفهم كيفية إصلاحه بشكل صحيح. قال أصدقائي إنه يمكن اختراقي عبر SQL injection. جربت إدخال شيء مثل `admin' OR '1'='1` في حقل اسم المستخدم، وفعلاً — دخلت إلى النظام بدون كلمة مرور!
قرأت عن `mysqli_real_escape_string()`، لكنني سمعت أنه ليس حلاً سحرياً. أيضاً يتحدثون عن PDO و prepared statements، لكنني لا أفهم كيفية استخدامها بشكل صحيح. مشروعي يعمل على PHP 8.1 مع MySQL.
من فضلكم، اشرحوا بالتفصيل:
1. كيف يعمل SQL injection بالضبط؟
2. ما هي طرق الحماية الحديثة؟
3. أي طريقة تعتبر أفضل ممارسة؟