Contoh dasar ASP: mengatasi kerentanan unggahan gambar ASP
Kerentanan pengunggahan ASP yang umum terdengar adalah mengunggah beberapa file Trojan dengan mengubah nama sufiksnya (menjadi sufiks file gambar).
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
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
File diunggah terlebih dahulu, lalu fungsi kustom segera digunakan untuk menentukan konsistensi jenis gambar file, dan FSO menghapus file tersebut.
Kerentanan unggahan ASP juga menggunakan /0 untuk memanipulasi jalur file.
Untuk situasi ini, fungsi berikut dapat digunakan:
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)