Avatar ·

تجاوز حقن 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()`؟ والأهم