هل لدى mysql_real_escape_string() عيوب غير قابلة للإصلاح؟
يؤكد بعض المتشككين أن وظيفة mysql_real_escape_string() معيبة بشكل أساسي ولا يمكنها حماية استعلامات SQL بشكل موثوق . يشيرون إلى مقالات قديمة كدليل.
هل يمكن استخدامها للبيانات المعدة خصيصًا؟
على الرغم من هذه المخاوف، لا يزال من الممكن تسخير mysql_real_escape_string() لإنشاء البيانات المعدة حسب الطلب. ومع ذلك، فإنه يتطلب اهتمامًا دقيقًا بالتعامل مع مجموعة الأحرف.
الحل:
وفقًا لوثائق MySQL C API الخاصة بـ mysql_real_escape_string()، يجب عليك استخدام mysql_set_character_set() لتعيين مجموعة الأحرف. وهذا يضمن أنه يؤثر أيضًا على مجموعة الأحرف المستخدمة بواسطة mysql_real_escape_string().
مثال الكود:
#includeint main() { MYSQL *conn = mysql_init(NULL); mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0); // Change the encoding using mysql_set_charset() mysql_set_charset(conn, "utf8"); // Create a custom prepared statement using mysql_real_escape_string() char query[1024]; mysql_real_escape_string(conn, query, "SELECT * FROM users WHERE username='test'", sizeof(query)); // Execute the query mysql_query(conn, query); mysql_close(conn); return 0; }
باتباع هذا الأسلوب وتجنب SET NAMES/SET CHARACTER SET، يمكنك استخدام mysql_real_escape_string() بشكل فعال لحماية استعلامات SQL الخاصة بك من الحقن.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3