كيف أقوم بتأمين مجلد يستخدم للسماح للمستخدمين بتحميل الملفات؟

StackOverflow https://stackoverflow.com/questions/22519

سؤال

لدي مجلد في خادم الويب الخاص بي يستخدم للمستخدمين لتحميل الصور باستخدام صفحة ASP.

هل من الآمن منح IUSR أذونات الكتابة للمجلد؟هل يجب علي تأمين شيء آخر؟أخشى من تجاوز المتسللين لصفحة ASP وتحميل المحتوى مباشرة إلى المجلد.

أنا أستخدم ASP classic وIIS6 على نظام التشغيل Windows 2003 Server.يتم التحميل عبر HTTP وليس FTP.

يحرر:تغيير السؤال من أجل الوضوح وتغيير إجاباتي كتعليقات.

هل كانت مفيدة؟

المحلول

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

في عالم PHP، يكون الأمر أسوأ من ذلك، لأن المهاجم يمكنه تحميل برنامج PHP برمجي ضار ثم الوصول إليه لاحقًا عبر خادم الويب.

قم دائمًا بتخزين الملفات التي تم تحميلها في دليل في مكان ما خارج جذر المستند والوصول إليها عبر بعض البرامج النصية للوصول التي تقوم بإجراء تعقيم إضافي (وعلى الأقل تقوم بتعيين صورة/أي نوع MIME بشكل صريح.

نصائح أخرى

كيف سيقوم المستخدم بتحميل الصور؟إذا كنت تكتب صفحة ASP لقبول الملفات التي تم تحميلها، فلن يحتاج سوى المستخدم الذي يقوم IIS بتشغيله إلى إذن الكتابة إلى المجلد، حيث أن IIS سيقوم بعملية الإدخال/الإخراج للملف.يجب أن تتحقق صفحة ASP الخاصة بك من حجم الملف وأن تحتوي على شكل من أشكال المصادقة لمنع المتسللين من ملء محرك الأقراص الثابتة لديك.

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

سيتعين عليك منح أذونات الكتابة، ولكن يمكنك التحقق من نوع الملف الصامت للتأكد من وجود صورة.يمكنك استخدام FSO على النحو التالي:

set fs=Server.CreateObject("Scripting.FileSystemObject")
set f=fs.GetFile("upload.jpg")
'image mime types or image/jpeg or image/gif, so just check to see if "image" is instr
if instr(f.type, "image") = 0 then
   f.delete
end if
set f=nothing
set fs=nothing

كما أن معظم كائنات COM التي يتم تحميلها لها خاصية نوع يمكنك التحقق منها قبل كتابة الملف.

من المحتمل أن يكون أفضل ما يمكنك الحصول عليه مقابل المال هو استخدام مكون التحميل (لقد استخدمت ASPUpload) الذي يسمح لك بتحميل/تنزيل الملفات من مجلد لا يمكن الوصول إليه من موقع الويب.

ستحصل على بعض أدوات المصادقة ولا داعي للقلق بشأن قيام شخص ما بتصفح المجلد بشكل عرضي وتنزيل الملفات (أو تحميلها في حالتك)، نظرًا لأن الملفات متاحة فقط من خلال المكون.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top