"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > هل يمكن استخدام mysql_real_escape_string() بأمان مع البيانات المعدة خصيصًا؟

هل يمكن استخدام mysql_real_escape_string() بأمان مع البيانات المعدة خصيصًا؟

تم النشر بتاريخ 2024-11-13
تصفح:931

Can mysql_real_escape_string() Be Used Safely with Custom Prepared Statements?

هل لدى 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().

مثال الكود:

#include 

int 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