في الواقع، هناك هذه الثغرة الأمنية، سواء كان ذلك مكونًا أو غير مكون، يرجى قراءة الكود التالي بعناية، طالما أنك تفهم الكود، يمكنك فهمه.
هنا نأخذ تحميل مكون ASPUPLOAD كمثال.
الوظائف الرئيسية الثلاثة التالية:
وظيفة killext(byval s1) 'اقتل ملحقات الملفات غير القانونية
السماح خافت
allowext=.JPG,.JPEG,.GIF,.BMP,.PNG,.SWF,.RM,.MP3,.WAV,.MID,.MIDI,.RA,.
AVI،.MPG،.MPEG،.ASF،.ASX،.WMA،.MOV،.RAR،.ZIP،.EXE،.DOC،.XLS،.CHM،.HLP،.PDF
s1=ucase(s1)
إذا لين (s1) = 0 ثم
Killext=
آخر
إذا لم يكن chk(allowext,s1,,) إذن
killext=.shit
آخر
Killext=s1
نهاية إذا
نهاية إذا
وظيفة النهاية
وظيفة chk(byval s1,byval s2,byval fuhao) "تأكد من أن السلسلة تحتوي على
ديمي، أ
chk=false
أ = انقسام (s1، فوهاو)
لأني = 0 إلى ubound(a)
إذا تقليم (أ (i)) = تقليم (s2) إذن
chk=true
الخروج ل
نهاية إذا
التالي
وظيفة النهاية
وظيفة gname(byval n1) 'إنشاء أسماء الدليل والملفات تلقائيًا بناءً على التاريخ، تقوم المعلمة 1 بإنشاء الدليل، وتقوم المعلمة 2 بإنشاء اسم الملف (بدون لاحقة)
خافت ر، ص
ر = الآن ()
عشوائي (المؤقت)
ص=كثافة العمليات((rnd+1-1)*9999)
حدد الحالة n1
الحالة 1
gname=year(t)&right(00&month(t),2)&right(00&day(t),2)
الحالة 2
gname=right(00&hour(t),2)&right(00&دقيقة(t),2)&right(00& Second(t),2)&right(0000&r,4)
حدد النهاية
وظيفة النهاية
طريقة الاتصال:
خافت أوب، أوفيل، تحويلة، مايفيل
الإعداد = Server.CreateObject(Persits.Upload)
oup.SetMaxSize 10000000، صحيح
استدعاء oup.Save() 'يتم تحميل هذا إلى ذاكرة الخادم، ولا يتم إنشاء ملف فعلي.
مجموعة ofile = oup.files(1)
تحويلة=killext(ofile.ext)
myfile=/ & ganme(1) &/& gname(2) & تحويلة
استدعاء ofile.saveas(server.mappath(myfile))
ملاحظات إضافية:
إذا استخدم أحد المتسللين nc لتحميل ملفات غير قانونية، فإن الملفات النهائية التي يحصلون عليها هي مجرد ملفات تافهة مثل 200511051234559103.shit!