Avatar ·

حقن SQL الذي يتجاوز mysql_real_escape_string() — كيف تحمي نفسك؟

وعليكم السلام! أنا مطور PHP مبتدئ واجهت موقفًا غريبًا جدًا. في العديد من المنتديات يكتبون أن الدالة `mysql_real_escape_string()` هي حماية موثوقة ضد حقن SQL، وكنت أستخدمها دائمًا. لكنني قرأت مؤخرًا أن هناك طرقًا لتجاوزها، وقد أخافني هذا كثيرًا. لدي كود بسيط لتسجيل دخول المستخدم: ```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); ``` كنت أعتقد أن هروب جميع علامات الاقتباس والأحرف الخاصة يجعل الاستعلام آمنًا. لكن يُقال أنه إذا تم استخدام ترميز متعدد البايتات (مثل GBK أو SJIS)، فمن الممكن اختيار تسلسل من الأحرف "يلتهم" شرطة الهروب ويسمح بإدراج كود SQL عشوائي. هل هذا صحيح؟ كيف يعمل هذا تحديدًا؟ والأهم — كيف يمكنني الآن حماية استعلاماتي بشكل صحيح؟ هل ح