Kerentanan unggahan ASP yang sering saya dengar adalah mengunggah beberapa file Trojan dengan memodifikasi nama akhiran (memodifikasinya menjadi sufiks file gambar) dan mengunggahnya.
Untuk situasi ini, gunakan fungsi -fungsi berikut untuk membedakan:
Salinan kode adalah sebagai berikut:
<%
'**************************************************************************
Fungsi checkFileType digunakan untuk memeriksa apakah file tersebut adalah file gambar
'Nama file parameter adalah jalur ke file lokal
'Jika itu adalah file jpeg, gif, bmp, gambar png, fungsi mengembalikan true, jika tidak ia mengembalikan false
'**************************************************************************
constadtypeBinary = 1
DIMJPG (1): jpg (0) = cbyte (& hff): jpg (1) = cbyte (& hd8)
dimbmp (1): bmp (0) = cbyte (& h42): bmp (1) = cbyte (& h4d)
DIMPNG (3): png (0) = cbyte (& h89): png (1) = cbyte (& h50): png (2) = cbyte (& h4e): png (3) = cbyte (& h47)
DIMGIF (5): GIF (0) = cbyte (& H47): gif (1) = cbyte (& h49): gif (2) = cbyte (& h46): gif (3) = cbyte (& h39): gif (4) = cbyte (& h38): gif (5) = cby (4) = cbyte (& h38): gif (5) = cby (4) = cbyte (& h38): gif (5) = CBYTE (4) = CBYTE (& H38): GIF (5) = CBYTE (4) = CBYTE (& H38): GIF (5) =
FunctionCheckFileType (nama file)
OnerrorresumeNext
CheckFileType = false
Dimfstream, fileext, stamp, i
fileExt = mid (nama file, instrrev (nama file, ".")+1)
setfstream = server.CreateObject ("adodb.stream")
fstream.open
fstream.type = adtypeBinary
fStream.LoadFromFileFileName
fStream.position = 0
SELECTCASEFILEEXT
kasus "jpg", "jpeg"
Stamp = fstream.read (2)
fori = 0to1
IFACB (MIDB (Stamp, I+1,1)) = jpg (i) sofekfileType = trueelsecheckfileType = false
Berikutnya
kasus "gif"
Stamp = fstream.read (6)
fori = 0to5
IFACB (midb (stempel, i+1,1)) = gif (i) sofekfileType = trueelsecheckfileType = false
Berikutnya
kasus "png"
Stamp = fstream.read (4)
fori = 0to3
IFACB (midb (stempel, i+1,1)) = png (i) sofekfileType = trueelsecheckfileType = false
Berikutnya
kasus "BMP"
Stamp = fstream.read (2)
fori = 0to1
IFACB (midb (stempel, i+1,1)) = BMP (i) sofekfileType = trueelsecheckfileType = false
Berikutnya
endselect
fstream.close
setFsetem = tidak ada
iferr.number <> 0thencheckFileType = false
fungsi endfungsi
%>
Lalu saat melamar
Salinan kode adalah sebagai berikut: checkFileType (server.mappath ("cnbruce.jpg"))
atau
CheckFileType ("f: /web/164/images/cnbruce.jpg"))), itu adalah untuk mendeteksi jenis file gambar yang memverifikasi alamat fisik lokal, dan mengembalikan nilai yang benar atau salah
Oleh karena itu, situasi ini digunakan dalam unggahan gambar. Metode saat ini adalah untuk terlebih dahulu mengizinkan unggahan file "pseudo-image", dan kemudian menggunakan fungsi khusus di atas untuk menentukan apakah file tersebut memenuhi spesifikasi gambar. Jika itu adalah file gambar Trojan yang disamarkan, FSO akan menghapusnya, misalnya:
Salin kode sebagai berikut: File.SaveasServer.Mappath (fileName) 'Simpan file
IfNotcheckFileType (server.mappath (nama file)) lalu