كيف تمنع MySQL حقن SQL؟ مبدأ حقن SQL والوقاية منه

MySQLكيف تمنع حقن SQL؟ مبدأ حقن SQL والوقاية منه

MySQL و SQL حقن

إذا كنت تأخذ البيانات التي أدخلها المستخدم من خلال صفحة ويب وأدخلها في ملفقاعدة بيانات MySQL، فقد تكون هناك مشكلات أمان حقن SQL.

سيقدم لك هذا الفصل كيفية منع حقن SQL واستخدام البرامج النصية لتصفية الأحرف المحقونة في SQL.

ما يسمى بحقن SQL هو لخداع الخادم لتنفيذ أوامر SQL الضارة عن طريق إدخال أوامر SQL في نموذج الويب لإرسال أو إدخال سلسلة الاستعلام الخاصة باسم المجال أو طلب الصفحة.

يجب ألا نثق أبدًا بإدخال المستخدم ، ويجب أن نفترض أن بيانات إدخال المستخدم غير آمنة ، ونحن جميعًا بحاجة إلى تصفية بيانات إدخال المستخدم.

في المثال التالي ، يجب أن يكون اسم المستخدم المُدخل مزيجًا من الأحرف والأرقام والشرطات السفلية ، ويجب أن يتراوح طول اسم المستخدم بين 8 و 20 حرفًا:

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysqli_query($conn, "SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

دعنا نلقي نظرة على موقف SQL الذي يحدث عندما لا يتم تصفية أي أحرف خاصة:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

في عبارة الحقن أعلاه ، لم نقم بتصفية المتغير $ name ، وتم إدراج عبارة SQL التي لا نحتاجها في $ name ، والتي ستحذف جميع البيانات الموجودة في جدول المستخدمين.

لا يُسمح لـ mysqli_query () في PHP بتنفيذ العديد من عبارات SQL ، ولكن في SQLite و PostgreSQL ، يمكن تنفيذ العديد من عبارات SQL في نفس الوقت ، لذلك نحتاج إلى التحقق بدقة من بيانات هؤلاء المستخدمين.

لمنع حقن SQL ، نحتاج إلى الانتباه إلى النقاط التالية:

  • 1. لا تثق أبدًا بإدخال المستخدم.تحقق من مدخلات المستخدم ، يمكنك استخدام التعبيرات العادية ، أو تحديد الطول ؛ تحويل علامات الاقتباس المفردة والمزدوجة "-" ، إلخ.
  • 2. لا تستخدم أبدًا SQL التجميع الديناميكي ، يمكنك استخدام SQL ذات المعلمات أو استخدام الإجراءات المخزنة مباشرة للاستعلام عن البيانات والوصول إليها.
  • 3. لا تستخدم اتصالات قاعدة البيانات مع امتيازات المسؤول مطلقًا ، واستخدم اتصالات قاعدة بيانات منفصلة بامتيازات محدودة لكل تطبيق.
  • 4. لا تقم بتخزين المعلومات السرية بشكل مباشر ، ولا تقم بتشفير أو تجزئة كلمات المرور والمعلومات الحساسة.
  • 5. يجب أن تقدم معلومات الاستثناء الخاصة بالتطبيق أقل قدر ممكن من التلميحات ، ومن الأفضل استخدام معلومات الخطأ المخصصة لالتفاف معلومات الخطأ الأصلية
  • 6. تعتمد طريقة الكشف عن حقن sql بشكل عام الوسائل المساعدةالبرمجياتأو منصة موقع الويب التي يجب اكتشافها ، يستخدم البرنامج بشكل عام أداة الكشف عن الحقن sql jsky ، ويحتوي النظام الأساسي لموقع الويب على أداة اكتشاف منصة أمان موقع الويب Yisi. MDCSOFT SCAN et al.يمكن أن يؤدي استخدام MDCSOFT-IPS إلى الدفاع بشكل فعال ضد حقن SQL وهجمات XSS وما إلى ذلك.

منع حقن SQL

في لغات البرمجة النصية مثل Perl و PHP ، يمكنك الهروب من البيانات التي يدخلها المستخدم لمنع إدخال SQL.

يوفر امتداد MySQL لـ PHP وظيفة mysqli_real_escape_string () للهروب من أحرف الإدخال الخاصة.

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysqli_real_escape_string($conn, $name);
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

الحقن في عبارات متشابهة

عند الاستعلام مثل ، إذا أدخل المستخدم قيمًا بـ "_" و "٪" ، فسيحدث هذا: أراد المستخدم في الأصل الاستعلام عن "abcd_" ، لكن نتائج الاستعلام تتضمن "abcd_" و "abcde" و "abcdf "إلخ ؛ تحدث المشكلة أيضًا عندما يريد المستخدم الاستعلام عن" 30٪ "(ملاحظة: ثلاثون بالمائة).

في نص PHP ، يمكننا استخدام الوظيفة addcslashes () للتعامل مع الموقف أعلاه ، كما في المثال التالي:

$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_");
// $sub == \%something\_
 mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

تضيف الدالة addcslashes () شرطة مائلة للخلف قبل الحرف المحدد.

تنسيق بناء الجملة:

addcslashes(string,characters)
参数描述
سلسلةمطلوب.تحدد السلسلة المراد فحصها.
الأحرفاختياري.يحدد الحرف أو نطاق الأحرف المتأثر بالشرط المائلة ().

مدونة Hope Chen Weiliang ( https://www.chenweiliang.com/ ) مشترك "كيف تمنع MySQL حقن SQL؟ مبدأ حقن SQL والوقاية "، سوف يساعدك.

مرحبا بكم في مشاركة رابط هذه المقالة:https://www.chenweiliang.com/cwl-500.html

مرحبًا بك في قناة Telegram الخاصة بمدونة Chen Weiliang للحصول على آخر التحديثات!

🔔 كن أول من يحصل على "دليل استخدام أداة الذكاء الاصطناعي لتسويق محتوى ChatGPT" في الدليل العلوي للقناة! 🌟
📚 يحتوي هذا الدليل على قيمة كبيرة، 🌟هذه فرصة نادرة، لا تفوتها! ⏰⌛💨
شارك و اعجبك اذا اردت
مشاركتك وإعجاباتك هي دافعنا المستمر!

 

发表 评论

لن يتم نشر عنوان بريدك الإلكتروني. 必填 项 已 用 * 标注

انتقل إلى أعلى