Grundlegendes ASP-Beispiel: Behebung der Sicherheitslücke beim Hochladen von ASP-Bildern
Eine häufig erwähnte ASP-Upload-Schwachstelle besteht darin, einige Trojaner-Dateien hochzuladen, indem ihre Suffixnamen (in Bilddateisuffixe) geändert werden.
Verwenden Sie die folgende Funktion, um diese Situation zu identifizieren:
<%
'************************************************** * ******************
Mit der Funktion „CheckFileType“ wird überprüft, ob es sich bei der Datei um eine Bilddatei handelt
'Der Parameter Dateiname ist der Pfad der lokalen Datei
„Wenn es sich um eine der Dateien JPEG, GIF, BMP, PNG handelt, gibt die Funktion „true“ zurück, andernfalls gibt sie „false“ zurück
'************************************************** * ******************
const adTypeBinary=1
dim jpg(1):jpg(0)=CByte(&HFF):jpg(1)=CByte(&HD8)
dim bmp(1):bmp(0)=CByte(&H42):bmp(1)=CByte(&H4D)
dim png(3):png(0)=CByte(&H89):png(1)=CByte(&H50):png(2)=CByte(&H4E):png(3)=CByte(&H47)
dim gif(5):gif(0)=CByte(&H47):gif(1)=CByte(&H49):gif(2)=CByte(&H46):gif(3)=CByte(&H39):gif(4) =CByte(&H38):gif(5)=CByte(&H61)
Funktion CheckFileType(Dateiname)
Bei Fehler als nächstes fortfahren
CheckFileType=false
dim fstream,fileExt,stamp,i
fileExt=mid(filename,InStrRev(filename,.)+1)
set fstream=Server.createobject(ADODB.Stream)
fstream.Öffnen
fstream.Type=adTypeBinary
fstream.LoadFromFile Dateiname
fstream.position=0
Wählen Sie FalldateiExt
Fall jpg,jpeg
stamp=fstream.read(2)
für i=0 bis 1
Wenn ascB(MidB(stamp,i+1,1))=jpg(i) dann CheckFileType=true, sonst CheckFileType=false
nächste
Fall-GIF
stamp=fstream.read(6)
für i=0 bis 5
Wenn ascB(MidB(stamp,i+1,1))=gif(i), dann CheckFileType=true, sonst CheckFileType=false
nächste
Fall png
stamp=fstream.read(4)
für i=0 bis 3
Wenn ascB(MidB(stamp,i+1,1))=png(i), dann CheckFileType=true, sonst CheckFileType=false
nächste
Fall bmp
stamp=fstream.read(2)
für i=0 bis 1
Wenn ascB(MidB(stamp,i+1,1))=bmp(i), dann CheckFileType=true, sonst CheckFileType=false
nächste
Ende auswählen
fstream.Schließen
setze fseteam=nichts
Wenn err.number<>0, dann ist CheckFileType=false
Endfunktion
%>
Dann bei der Bewerbung
CheckFileType(server.mappath(cnbruce.jpg))
oder
CheckFileType(F:/web/164/images/cnbruce.jpg))
Auf jeden Fall dient es dazu, den Bilddateityp der lokalen physischen Adresse zu erkennen und zu überprüfen und einen wahren oder falschen Wert zurückzugeben.
Daher gilt diese Situation für das Hochladen von Bildern. Die aktuelle Methode besteht darin, zunächst das Hochladen der Pseudo-Bilddatei zuzulassen und dann die oben genannte benutzerdefinierte Funktion zu verwenden, um festzustellen, ob die Datei den Bildspezifikationen entspricht Trojanisches Pferd, FSO wird es löschen, wie zum Beispiel:
file.SaveAs Server.mappath(filename) 'Speichern Sie die Datei
Wenn nicht, CheckFileType(Server.mappath(filename)) dann
Antwort. Falsches Bildformat schreiben
Setze fso = CreateObject(Scripting.FileSystemObject)
Setze ficn = fso.GetFile(Server.mappath(filename))
ficn.löschen
setficn=nichts
setze fso=nichts
Antwort.Ende
Ende wenn
Die Datei wird zuerst hochgeladen, dann wird sofort eine benutzerdefinierte Funktion verwendet, um die Konsistenz des Dateibildtyps zu bestimmen, und FSO löscht die Datei.
Die ASP-Upload-Schwachstelle verwendet auch /0, um den Dateipfad zu manipulieren.
Für diese Situation kann die folgende Funktion verwendet werden:
Funktion TrueStr(fileTrue)
str_len=len(fileTrue)
pos=Instr(fileTrue,chr(0))
wenn pos=0 oder pos=str_len dann
TrueStr=true
anders
TrueStr=false
Ende wenn
Endfunktion
Dann können Sie vor dem Hochladen der Datei ein Urteil fällen.
wenn TrueStr(filename)=false dann
Antwort. Ungültige Datei schreiben
Antwort.Ende
Ende wenn
file.SaveAs Server.mappath(Dateiname)