الهدف من حقن MySQL هو الاستيلاء على قاعدة بيانات موقع الويب وسرقة المعلومات. تم استخدام قواعد البيانات الشائعة مفتوحة المصدر، مثل MySQL، من قبل العديد من مطوري مواقع الويب لتخزين المعلومات المهمة مثل كلمات المرور والمعلومات الشخصية والمعلومات الإدارية.
تحظى MySQL بشعبية كبيرة لأنها تُستخدم مع لغة البرمجة النصية الأكثر شيوعًا من جانب الخادم، PHP. علاوة على ذلك، PHP هي اللغة الرئيسية لخادم Linux-Apache الذي يهيمن على الإنترنت. لذلك، هذا يعني أن المتسللين يمكنهم بسهولة استغلال PHP تمامًا مثل برامج التجسس التي تعمل بنظام Windows.
يقوم المتسللون بإدخال كميات كبيرة من التعليمات البرمجية الضارة في نموذج ويب غير آمن (عبر القوائم المنسدلة ومربعات البحث ونماذج الاتصال ونماذج الاستعلام ومربعات الاختيار).
سيتم إرسال التعليمات البرمجية الضارة إلى قاعدة بيانات MySQL ثم "حقنها". لعرض هذه العملية، خذ بعين الاعتبار أولاً بيان استعلام MySQL SELECT الأساسي التالي:
SELECT * FROM xmen WHERE username = 'wolverine'
سيطلب هذا الاستعلام من قاعدة البيانات التي تحتوي على جدول "xmen" إرجاع جزء معين من البيانات باسم المستخدم "wolverine" في الخلية.
في نموذج الويب، سيدخل المستخدم ولفيرين، وسيتم تمرير هذه البيانات إلى استعلام MySQL.
إذا كان الإدخال غير صالح، فهناك طرق أخرى للمتسللين للتحكم في قاعدة البيانات، مثل تعيين اسم المستخدم:
' OR ''=''
قد تعتقد أنه من الآمن استخدام بناء جملة PHP وMySQL العادي لإجراء الإدخال، لأن في كل مرة يقوم شخص ما بإدخال تعليمات برمجية ضارة، ستتلقى رسالة "استعلام غير صالح"، ولكن هذا ليس هو الحال. المتسللون أذكياء، وليس من السهل تصحيح أي ثغرة أمنية لأنها تتضمن تنظيف قاعدة البيانات وإعادة تعيين الامتيازات الإدارية.
فيما يلي سوء فهم شائع حول هجمات حقن MySQL:
1. يعتقد مسؤولو الشبكة أنه يمكن تنظيف عمليات الحقن الضارة باستخدام برامج مكافحة الفيروسات أو برامج مكافحة برامج التجسس. والحقيقة هي أن هذا النوع من العدوى يستغل نقاط الضعف في قاعدة بيانات MySQL. ولا يمكن إزالته ببساطة بواسطة أي برنامج مكافحة برامج التجسس أو مكافحة الفيروسات.
2. يحدث حقن MySQL نتيجة لنسخ ملف مصاب من خادم آخر أو مصدر خارجي. هذا ليس هو الحال. يحدث هذا النوع من العدوى عندما يقوم شخص ما بإدخال تعليمات برمجية ضارة في نموذج غير محمي على موقع ويب ثم يصل إلى قاعدة البيانات. يمكن تنظيف حقن MySQL عن طريق إزالة البرنامج النصي الضار، بدلاً من استخدام برنامج مكافحة الفيروسات.
تقومعملية التحقق من صحة إدخال المستخدم
بعمل نسخة احتياطية لقاعدة بيانات نظيفة ووضعها خارج الخادم. تصدير مجموعة من جداول MySQL وحفظها على سطح المكتب.
ثم انتقل إلى الخادم وقم بإيقاف تشغيل إدخال النموذج مؤقتًا أولاً. وهذا يعني أن النموذج لا يمكنه معالجة البيانات ويتم إغلاق موقع الويب.
ثم ابدأ عملية التنظيف. أولاً، على الخادم الخاص بك، قم بتنظيف أي حقن MySQL فوضوية متبقية. تغيير جميع كلمات مرور قواعد البيانات وFTP ومواقع الويب.
في أسوأ السيناريوهات، إذا تأخرت في عملية التنظيف، فيمكنك التحقق مرة أخرى من البرامج المخفية التي تعمل على الخادم الخاص بك. هذه البرامج المخفية هي أحصنة طروادة تم تثبيتها بواسطة المتسللين. قم بإزالته بالكامل وقم بتغيير جميع أذونات FTP. فحص الخادم بحثًا عن كافة أحصنة طروادة والبرامج الضارة.
عند تعديل برنامج PHP النصي، ستتم معالجة بيانات النموذج. إحدى الطرق الجيدة لمنع حقن MySQL هي عدم الثقة في بيانات المستخدم. يعد التحقق من صحة إدخال المستخدم أمرًا مهمًا للغاية لمنع حقن MySQL.
لتصميم مرشح لتصفية مدخلات المستخدم، إليك بعض النصائح:
1. المدخلات في النموذج هي أرقام. يمكنك التحقق من أنه رقم عن طريق اختبار أنه يساوي أو أكبر من 0.001 (على افتراض أنك لا تقبل الصفر).
2. إذا كان عنوان بريد إلكتروني. تحقق مما إذا كان يتكون من مجموعات الأحرف المسموح بها، مثل "@" أو AZ أو az أو بعض الأرقام.
3. إذا كان اسم شخص أو اسم مستخدم. يمكن التحقق من ذلك من خلال ما إذا كان يحتوي على أي أحرف غير قانونية، مثل و و*، وهي أحرف ضارة يمكن استخدامها لإدخال SQL.
التحقق من صحة الإدخال الرقمي
يتحقق البرنامج النصي التالي من إدخال رقم صالح من 0.001 إلى ما لا نهاية. ومن الجدير بالذكر أنه في برنامج PHP، يمكنك حتى السماح باستخدام الأرقام ضمن نطاق معين. استخدم البرنامج النصي للتحقق من الصحة للتأكد من إدخال رقم فقط في النموذج.
لنفترض أن لديك ثلاثة متغيرات رقمية في برنامجك وتحتاج إلى التحقق من صحتها، دعنا نسميها num1 وnum2 وnum3:
// التحقق من صحة الإدخال الرقمي؛
إذا($_POST['num1'] >= 0.001 && $_POST['num2'] >= 0.001 && $_POST['num3'] >= 0.001){
}else{
}
?>
ويمكن تمديد الشرط لاستيعاب أكثر من ثلاثة أرقام. لذا، إذا كان لديك 10، فستحتاج فقط إلى توسيع جملة AND.
ويمكن استخدام ذلك للتحقق من صحة النموذج الذي يقبل الأرقام فقط، مثل كميات العقد وأرقام الترخيص وأرقام الهواتف وما إلى ذلك.
التحقق من صحة إدخالات النص وعنوان البريد الإلكتروني
يمكن استخدام ما يلي للتحقق من صحة مدخلات النموذج مثل أسماء المستخدمين والأسماء الأولى وعناوين البريد الإلكتروني:
// التحقق من صحة إدخال النص
if (! preg_match('/^[-az.-@,'s]*$/i',$_POST['name'])){
}
elseif ($empty==0){
}else{
}
?>
إحدى ميزات برنامج التحقق من الصحة هذا هو أنه لا يقبل الإدخال الفارغ. يتلاعب بعض المستخدمين الضارين أيضًا بقواعد البيانات من خلال مدخلات فارغة. باستخدام البرنامج النصي أعلاه، قم بالتحقق من صحة متغير حرفي واحد فقط، "$name". وهذا يعني أنه إذا كان لديك ثلاثة متغيرات نصية، فيمكنك إعداد برنامج نصي للتحقق من الصحة لكل متغير للتأكد من اجتياز كل متغير للمراجعة قبل الدخول إلى قاعدة البيانات.