ASP mengunggah kerentanan yang sering didengar, yaitu, memodifikasi beberapa file Trojan (dimodifikasi menjadi sufiks file gambar) dan mengunggah.
Gunakan fungsi -fungsi berikut untuk mengidentifikasi situasi ini:
<%
'*********************************************** ********************************************** ********************************************** ********************************************** ********************************************** **************, ********************
'Fungsi checkFileType digunakan untuk memeriksa apakah file tersebut adalah file gambar
'Parameter nama file adalah jalur file lokal
'Jika itu adalah file jpeg, gif, bmp, png gambar, fungsi mengembalikan true, jika tidak itu akan mengembalikan false
'*********************************************** ********************************************** ********************************************** ********************************************** ********************************************** **************, ********************
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)
Function CheckFileType (nama file)
Pada kesalahan resume berikutnya
CheckFileType = false
Redup fstream, fileext, stamp, i
filext = mid (nama file, instrrev (fileName ,.)+1)
Atur fStream = server.CreateObject (adodb.stream)
fstream.open
fstream.type = adtypeBinary
FStream.LoadFromFile nama file
fStream.position = 0
Pilih case fileext
Kasus JPG, JPEG
Stamp = fstream.read (2)
untuk i = 0 hingga 1
Jika ASCB (midb (stempel, i+1,1)) = jpg (i) maka checkFileType = true lagi checkFileType = false
Berikutnya
Gif case
Stamp = fstream.read (6)
untuk i = 0 hingga 5
Jika ASCB (midb (cap, i+1,1)) = gif (i) checkFileType = true lagi checkFileType = false
Berikutnya
Kasus png
Stamp = fstream.read (4)
untuk i = 0 hingga 3
Jika ASCB (midb (stempel, i+1,1)) = png (i) checkFileType = true lagi checkFileType = false
Berikutnya
Kasus BMP
Stamp = fstream.read (2)
untuk i = 0 hingga 1
Jika ASCB (midb (stempel, i+1,1)) = bmp (i) maka checkFileType = true lagi checkFileType = false
Berikutnya
Akhiri Pilih
fstream.close
atur fseteam = tidak ada
Jika err.number <> 0 checkFileType = false
fungsi akhir
%>
Lalu saat melamar
CheckFileType (server.mappath (cnbruce.jpg))
atau
CheckFileType (f: /web/164/images/cnbruce.jpg))
Bagaimanapun, itu adalah jenis file gambar yang memverifikasi alamat fisik lokal, dan mengembalikan nilai yang benar atau salah
Oleh karena itu, situasi ini diterapkan untuk mengunggah gambar
file.saveas server.mappath (fileName) 'untuk menyimpan file
Jika tidak checkFileType (server.mappath (fileName)) lalu
Response.write format gambar kesalahan
Atur fso = createObject (scripting.filesystemObject)
Setel ficn = fso.getFile (server.mappath (fileName))
Ficn.delete
atur ficn = tidak ada
atur fso = tidak ada
respons.end
akhiri jika
File diunggah terlebih dahulu, dan kemudian segera menggunakan fungsi khusus untuk menentukan anastomosis jenis gambar file, dan FSO untuk menghapus file.
Kerentanan unggah ASP juga menggunakan/0 untuk filepath untuk operasi tangan dan kaki
Fungsi berikut dapat digunakan untuk situasi ini:
Fungsi truestr (filetrue)
str_len = len (filetrue)
POS = Instr (Filetrue, Chr (0))
jika pos = 0 atau pos = str_len maka
Truestr = true
kalau tidak
Truestr = false
akhiri jika
fungsi akhir
Kemudian Anda dapat menilai dan kemudian mengunggah file
jika truestr (nama file) = false
response.write file ilegal
respons.end
akhiri jika
file.saveas server.mappath (nama file)
%>