تجاوز حقن SQL لـ mysql_real_escape_string() — كيف تحمي نفسك؟
مرحباً بالجميع! أنا مطور PHP مبتدئ، ويقلقني سؤال واحد. قرأت أن دالة `mysql_real_escape_string()` (أو نظيرتها `mysqli_real_escape_string()`) تُعتبر حماية موثوقة ضد SQL-инъекция. لكن مؤخراً صادفت منشوراً قديماً على Stack Overflow يدّعي أنه يمكن تجاوزها.
في مشروعي، أستخدم الإضافة القديمة `mysql_*` (أعلم أنها deprecated، لكن المشروع قديم، ولا توجد إمكانية لإعادة كتابة كل شيء على PDO). إليك مثال على كودي:
```php
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = mysql_query($query);
```
كنت أعتقد بسذاجة أن escape للأحرف مثل علامات الاقتباس كافٍ. لكن في ذلك النقاش، كان الحديث عن الترميزات، الأحرف متعددة البايت، ونوع من السحر مع `GBK`. لم أفهم تماماً جوهر الثغرة. كيف يمكن تجاوز `mysql_real_escape_string()`؟ والأهم