Unabhängig davon, ob es sich um einen Komponenten- oder einen Nicht-Komponenten-Upload handelt, besteht diese Sicherheitsanfälligkeit. Bitte lesen Sie den folgenden Code sorgfältig durch.
Hier nehmen wir als Beispiel den ASPUPLOAD-Komponenten-Upload.
Die folgenden 3 Schlüsselfunktionen:
function killext(byval s1) 'Töte illegale Dateisuffixe
dimmen erlaubenext
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)
wenn len(s1)=0 dann
killext=
anders
Wenn nicht, dann chk(allowext,s1,,).
killext=.shit
anders
killext=s1
Ende wenn
Ende wenn
Endfunktion
function chk(byval s1,byval s2,byval fuhao) 'Überprüfen Sie, ob die Zeichenfolge enthält
dimi,a
chk=false
a=split(s1,fuhao)
für i = 0 bis ubound(a)
wenn trim(a(i))=trim(s2), dann
chk=true
Ausgang für
Ende wenn
nächste
Endfunktion
function gname(byval n1) 'Verzeichnis- und Dateinamen automatisch basierend auf dem Datum generieren, Parameter 1 generiert das Verzeichnis, Parameter 2 generiert den Dateinamen (kein Suffix)
dim t,r
t=jetzt()
randomisieren (Timer)
r=int((rnd+1-1)*9999)
Wählen Sie Fall n1
Fall 1
gname=year(t)&right(00&month(t),2)&right(00&day(t),2)
Fall 2
gname=right(00&hour(t),2)&right(00&minute(t),2)&right(00&second(t),2)&right(0000&r,4)
Ende auswählen
Endfunktion
Aufrufmethode:
dim oup,ofile,ext,myfile
Set oup = Server.CreateObject(Persits.Upload)
oup.SetMaxSize 10000000, True
call oup.Save() 'Dies wird in den Serverspeicher hochgeladen und es wird keine eigentliche Datei generiert.
set ofile = oup.files(1)
ext=killext(ofile.ext)
myfile=/ & ganme(1) & / & gname(2) & ext
Aufruf vonile.saveas(server.mappath(myfile))
Zusätzliche Hinweise:
Wenn ein Hacker nc verwendet, um illegale Dateien hochzuladen, sind die endgültigen Dateien, die er erhält, nur beschissene Dateien wie 200511051234559103.shit!