كيفية منع ثغرات وحدات رفع الملفات

تُعد وحدات رفع الملفات من أضعف الروابط في تطبيقات الويب. قد يُؤدي ارتكاب أي أخطاء ، حتى تلك التي قد تعتبرها صغيرة ، إلى إمكانية وقوع التحكم المباشر في الخادم في أيدي المُخترق الإلكتروني. لهذا السبب ، يحتاج مطور البرمجيات إلى معرفة الأخطاء الأكثر شيوعًا وبعض طرق الهجوم التي يُمكن أن تحدث.

إذن ما هو التلاعب من جانب العميل؟ كيف يُمكنك مكافحته للحفاظ على أمان مواقعك على الويب ومُستخدميك؟ تحقق من كيف يُمكن اختراق خادمك: إليك الطريقة.

كيفية منع ثغرات وحدات رفع الملفات - حماية

ما هو التلاعب من جانب العميل؟

التلاعب من جانب العميل هو المفهوم الأساسي لهجمات تطبيقات الويب ككل. ببساطة ، هذا يعني أنه لم يعد بإمكانك الوثوق بأي من البيانات التي تُرسلها إلى المستخدم. بالإضافة إلى ذلك ، يُعد التلاعب من جانب العميل أحد أسس تطوير التطبيقات الآمنة. إذا قمت بفحص وحدة رفع الملفات التي تتعامل معها وفكرت في التلاعب من جانب العميل ، فإنَّ البيانات التي لا تثق بها تتضمن:

  1. اسم الملف المرفوع.
  2. نوع محتوى الملف الذي تم رفعه.

حيث تُعتبر هذه العناصر هي المكان الذي تُتاح لك فيه الفرصة لإدراجها في القائمة البيضاء كمُطور برمجيات. يمكن أن تحتوي بيانات اسم الملف الذي تم رفعه على أي شيء مع التلاعب من جانب العميل. باستخدام بيانات نوع المحتوى للملف الذي تم رفعه، حتى إذا قام المهاجم بتحميل ملف. exe ، فقد يظهر هذا الملف كصورة /jpeg في النظام.

تنسيق الملف والقائمة البيضاء

كيفية منع ثغرات وحدات رفع الملفات - حماية

أثناء تطوير وحدات رفع الملفات ، فإنَّ أول شيء يجب فعله هو إضافة تنسيق الملف إلى القائمة البيضاء. على سبيل المثال ، يُريد المستخدم رفع ملف باسم “muo.jpeg”. يجب عليك التأكد من أنَّ تنسيق الملف الذي يريد المستخدم رفعه هو .jpeg. لهذا ، يجب على النظام التحقق من الملف الذي تم رفعه ومعرفة ما إذا كان أحد تنسيقات الملف المسموح بها. لفهم كيفية القيام بذلك ، قم بفحص كود PHP البسيط التالي:

$file_parts = pathinfo($filename);
switch($file_parts[‘extension’])
{
case “jpg”:
break;

case “bat”: // Or exe, dll, so, etc.
break;

case “”:
case NULL: // No file extension
break;
}

يُمكنك القيام بذلك باستخدام كتلة تعليمات برمجية مشابهة لتلك الموجودة أعلاه ، أو يُمكنك استخدام الفئات والدوال التي يُوفرها إطار العمل الذي تستخدمه.

تحذير: احذر من إنشاء بيانات تنسيق الملف عن طريق تحليل اسم الملف وفقًا لحرف النقطة (.) ، لأنَّ المهاجم يُمكنه تجاوز خطوة التحقق هذه باسم ملف مثل “muo.jpeg.php”.

ما هي معلومات نوع المحتوى؟

معلومات نوع المحتوى هي جزء من المعلومات المرسلة في طلب HTTP لكل عليم رفع ملف. يكتشف متصفح الإنترنت هذه المعلومات ويضيفها إلى الطلب المرسل. يُمكن للمهاجم محاولة تغيير المعلومات من خلال التلاعب من جانب العميل وتجاوز عمليات التحقق من جانب الخادم. في هذه المرحلة ، يحتاج المُطور إلى آلية تحكم لإجراء عمليات التحقق من صحة معلومات نوع المحتوى. هذا وحده لن يكون كافيا. لا يزال ، من المهم للمُطور الانتباه إليها.

لنفترض أنك تقوم بتشفير آلية للتحقق من تنسيق الملف بشكل صحيح ، ولا تقبل سوى الملفات ذات التنسيق .jpeg. بالإضافة إلى هذه الآلية الاحترازية ، يُمكنك التحقق من معلومات نوع المحتوى فقط في حالة وقبول الملفات التي تحتوي على معلومات صورة /jpeg فقط ، وهو مستوى إضافي من الحماية ضد الهجمات الإلكترونية. تحقق من ما هو التحكم في الوصول ولماذا تحتاجه؟

ملفات فلاش SWF وخطوات الهجوم

لا يعني تنسيق الملف وبيانات نوع المحتوى شيئًا لمتصفحات الإنترنت التي تدعم المُكوِّنات الإضافية مثل Adobe Flash Player. على الرغم من أن دعم هذا المُشغِّل لم يعد متاحًا ، إلا أنه لا يزال من المُمكن تثبيت تلك الملفات ذات الصلة على العديد من الأنظمة ، على الرغم من أنَّ Flash لا يزال يمثل خطرًا أمنيًا. في نظام لم يتخذ الاحتياطات ذات الصلة ، من الممكن استدعاء ملف Flash بعلامة <object> ، بغض النظر عن تنسيقه. سيؤدي هذا إلى مشكلة أمنية خطيرة أخرى.

كيفية منع ثغرات وحدات رفع الملفات - حماية

من أجل اتخاذ إجراء ، يحتاج المُطور إلى معرفة المسارات التي يُمكن لمجرمي الإنترنت اتخاذها. إليك كيف يمكن أن يحدث ذلك:

  • يقوم المهاجم برفع ملف SWF (تنسيق ملف Adobe Flash) باسم “image.jpeg” إلى موقع الويب المُستهدف. أثناء عملية الرفع ، يتم التأكيد في عملية التحقق من القائمة البيضاء على أنَّ الملف الذي تم تحميله بواسطة المهاجم له تنسيق .jpeg. يتم تجاوز التحقق من نوع المحتوى من خلال التلاعب من جانب العميل. تخيل أنَّ هذا الملف ، الذي تم رفعه بواسطة المهاجم ، ينتقل إلى:
“www(dot)target-site(dot)com/images/images.jpeg”
  • لنفترض أنَّ المهاجم لديه موقع ويب يُسمى attacker(dot)com. يستدعي المهاجم ملف image.jpeg الذي تم رفعه إلى موقع الويب المُستهدف على موقع الويب للمُهاجم ، باستخدام علامة <object> مع تعيين نوع application/x-shockwave-flash.
  • يقوم المُستخدم المُطمئن بتسجيل الدخول إلى موقع attacker(dot)com. يستدعي هذا الموقع ملف SWF على www(dot)targetsite(dot)com/images/image.jpeg ويُنفذ الأوامر المعطاة إلى SWF.
  • من خلال هذه الخطوات ، يُمكن للمهاجم الإلكتروني إنشاء إجراءات طلب HTTP لعنوان موقع الويب target-site(dot)com دون ملاحظة المُستخدمين العاديين. مع هذه الطلبات ، سيستخدم المهاجم جلسة المستخدم المُطمئن ويتجاوز فحص CSRF.

لفهم سيناريو الهجوم هذا بشكل أكثر وضوحًا ، ضع في اعتبارك أنَّ الكود التالي موجود في محتوى HTML <object> المُرسل إلى المستخدم بواسطة attacker(dot)com:

style=”height:1px;width:1px;” data=”www.target-site.com/images/image.jpeg" type=”application/x-shockwave-flash” allowscriptaccess=”always” flashvars=”c=read&u=somethings”

أحد أفضل الحلول هو الوصول إلى الملفات التي تم رفعها مع تحميل الملف عبر نطاق فرعي مختلف. في السيناريو المذكور أعلاه ، يُمكنك الوصول إلى الملفات الثابتة ليس من نفس النطاق ، ولكن من نطاق فرعي مُختلف على النحو التالي: “http(colon)//file.target-site(dot)com/images/image.jpeg”.

الحل الآخر هو إضافة معلومات Content-Disposition: attachement إلى استجابة HTTP عندما تتلقى طلبًا للوصول إلى الملفات التي تُريد رفعها. تحقق من مزايا وعيوب استخدام التخزين السحابي للعمل عن بُعد.

اتخذ الاحتياطات اللازمة لمواجهة ثغرات رفع الملفات

يُعد أي رفع ملفات يُمكِن للمُستخدمين إجراؤه على موقع ويب أمرًا خطيرًا ، لذا فهذه إحدى المشكلات التي يجب على المطورين إيلاء أكبر قدر من الاهتمام لها. إذا اكتشف المهاجم مثل هذه الثغرة الأمنية ، فيُمكنه فتح طبقة داخل موقع الويب واستغلال المعلومات الموجودة على الخادم بسهولة. من المُهم للغاية التحكم في جميع الملفات التي تم رفعها بواسطة المستخدمين ، وتطبيق أساليب القائمة البيضاء ، وإخفاء موقع الدليل الذي تم رفع الملفات إليه إن أمكن.

وبالطبع ، هناك العديد من الخطوات الإضافية الأخرى التي يجب عليك اتخاذها لحماية موقعك على الويب ، حتى لو اتخذت جميع الاحتياطات الموصى بها لوحدات رفع الملفات. يُعد استخدام رؤوس أمان HTTP إحدى هذه الخطوات التي يُمكنك اتخاذها. يُمكنك الإطلاع الآن على ما هو أمان الحاويات ولماذا تحتاجه؟

زر الذهاب إلى الأعلى