Kita pasti pernah mendengar tentang kerentanan unggahan ASP. Prinsipnya adalah mengubah nama akhiran beberapa file Trojan (menjadi akhiran file gambar) dan mengunggahnya.
Catatan: CheckFileType tidak dapat menentukan file yang disamarkan sebagai GIF89a.
Gunakan fungsi berikut untuk mengidentifikasi situasi ini:
<%
'******************************************************* ****************
'Fungsi CheckFileType digunakan untuk memeriksa apakah file tersebut adalah file gambar
'Nama file parameter adalah jalur file lokal
'Jika itu adalah salah satu file jpeg, gif, bmp, png, fungsinya mengembalikan nilai true, jika tidak maka akan mengembalikan false
'******************************************************* ****************
const adTypeBinary=1
redupkan jpg(1):jpg(0)=CByte(&HFF):jpg(1)=CByte(&HD8)
redupkan bmp(1):bmp(0)=CByte(&H42):bmp(1)=CByte(&H4D)
redup png(3):png(0)=CByte(&H89):png(1)=CByte(&H50):png(2)=CByte(&H4E):png(3)=CByte(&H47)
redup 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)
fungsi CheckFileType (nama file)
pada kesalahan lanjutkan berikutnya
CheckFileType=salah
nama file=LCase(nama file)
redupkan fstream,fileExt,cap,i
fileExt=mid(nama file,InStrRev(nama file,.)+1)
setel fstream=Server.buat objek(ADODB.Stream)
fstream.Buka
fstream.Type=adTypeBinary
fstream.LoadFromFile nama file
fstream.posisi=0
pilih file kasusExt
kasus jpg,jpeg
cap=fstream.baca(2)
untuk i=0 hingga 1
jika ascB(MidB(stempel,i+1,1))=jpg(i) maka CheckFileType=true else CheckFileType=false
Berikutnya
gif kasus
cap=fstream.baca(6)
untuk i=0 sampai 5
jika ascB(MidB(stempel,i+1,1))=gif(i) maka CheckFileType=true else CheckFileType=false
Berikutnya
png kasus
cap=fstream.baca(4)
untuk i=0 hingga 3
jika ascB(MidB(stempel,i+1,1))=png(i) maka CheckFileType=true else CheckFileType=false
Berikutnya
kasus bmp
cap=fstream.baca(2)
untuk i=0 hingga 1
jika ascB(MidB(stempel,i+1,1))=bmp(i) maka CheckFileType=true else CheckFileType=false
Berikutnya
akhir pilih
fstream.Tutup
atur fseteam=tidak ada
jika err.number<>0 maka CheckFileType=false
fungsi akhir
%>
Lalu saat melamar
CheckFileType(server.mappath(cnbruce.jpg))
atau
CheckFileType(F:/web/164/images/cnbruce.jpg))
Bagaimanapun, ini untuk mendeteksi dan memverifikasi jenis file gambar dari alamat fisik lokal dan mengembalikan nilai benar atau salah.
Oleh karena itu, situasi ini berlaku untuk pengunggahan gambar. Metode saat ini adalah mengizinkan pengunggahan file gambar semu terlebih dahulu, lalu menggunakan fungsi khusus di atas untuk menentukan apakah file tersebut memenuhi spesifikasi gambar Trojan horse, FSO akan menghapusnya, seperti :
file.SaveAs Server.mappath(nama file) 'Simpan file
Jika bukan CheckFileType(Server.mappath(nama file)) maka
respon.tulis format gambar yang salah
Setel fso = CreateObject(Scripting.FileSystemObject)
Setel ficn = fso.GetFile(Server.mappath(nama file))
ficn.delete
setficn=tidak ada
atur fso=tidak ada
respon.akhir
berakhir jika
Kerentanan unggahan ASP juga menggunakan /0 untuk memanipulasi jalur file.
http://www.vevb.com/blog/showlog.asp?cat_id=32&log_id=635
Untuk situasi ini, Anda dapat menggunakan fungsi berikut
fungsi TrueStr(fileTrue)
str_len=len(fileBenar)
pos=Instr(fileTrue,chr(0))
jika pos=0 atau pos=str_len maka
BenarStr=benar
kalau tidak
BenarStr=salah
berakhir jika
fungsi akhir
Kemudian Anda dapat membuat penilaian sebelum mengunggah file tersebut.
jika TrueStr(nama file)=salah maka
respon.tulis file ilegal
respon.akhir
berakhir jika
file.SaveAs Server.mappath(nama file)