ช่องโหว่การอัพโหลด ASP ที่ฉันมักจะได้ยินคือการอัปโหลดไฟล์โทรจันบางไฟล์โดยการแก้ไขชื่อต่อท้าย (แก้ไขเป็นคำต่อท้ายไฟล์ภาพ) และอัปโหลด
สำหรับสถานการณ์นี้ให้ใช้ฟังก์ชั่นต่อไปนี้เพื่อแยกแยะ:
การคัดลอกรหัสมีดังนี้:
-
-
'ฟังก์ชั่น CheckFileType ใช้เพื่อตรวจสอบว่าไฟล์เป็นไฟล์ภาพหรือไม่
'ชื่อไฟล์พารามิเตอร์เป็นพา ธ ไปยังไฟล์ท้องถิ่น
'ถ้ามันเป็นไฟล์ jpeg, gif, bmp, png, ฟังก์ชันส่งกลับจริงมิฉะนั้นจะส่งคืนเท็จ
-
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) = cbyte (
FunctionCheckFileType (ชื่อไฟล์)
onerrorresumenext
checkFileType = false
dimfstream, fileext, แสตมป์, i
fileext = mid (ชื่อไฟล์, instrrev (ชื่อไฟล์, ".". ")+1)
setfstream = server.createObject ("adodb.stream")
fstream.open
fstream.type = adtypebinary
fstream.loadfromfilefilename
fstream.position = 0
SELECTCASEFILEEXT
กรณี "JPG", "JPEG"
แสตมป์ = fstream.read (2)
fori = 0to1
IFACB (MIDB (แสตมป์, i+1,1)) = jpg (i) thencheckFileType = treeelseCheckFileType = false
ต่อไป
กรณี "gif"
แสตมป์ = fstream.read (6)
fori = 0to5
IFACB (MIDB (แสตมป์, i+1,1)) = gif (i) thenCheckFileType = TrueelseCheckFileType = FALSE
ต่อไป
กรณี "png"
แสตมป์ = fstream.read (4)
fori = 0to3
IFACB (MIDB (แสตมป์, i+1,1)) = png (i) thencheckFileType = TrueelseCheckFileType = FALSE
ต่อไป
กรณี "BMP"
แสตมป์ = fstream.read (2)
fori = 0to1
IFACB (MIDB (แสตมป์, i+1,1)) = BMP (i) thenCheckFileType = TrueelseCheckFileType = FALSE
ต่อไป
endelect
fstream.close
setfsetem = ไม่มีอะไร
iferr.number <> 0thencheckFileType = false
endfunction
-
จากนั้นเมื่อสมัคร
การคัดลอกรหัสมีดังนี้: CheckFileType (Server.mappath ("cnbruce.jpg"))))))))))))))))))))
หรือ
CheckFileType ("f: /web/164/images/cnbruce.jpg")) อย่างไรก็ตามมันคือการตรวจจับประเภทไฟล์ภาพที่ตรวจสอบที่อยู่ทางกายภาพในท้องถิ่นและส่งคืนค่าจริงหรือเท็จ
ดังนั้นสถานการณ์นี้จะใช้ในการอัปโหลดรูปภาพ วิธีการปัจจุบันคือการอนุญาตให้อัปโหลดไฟล์ "pseudo-image" ก่อนจากนั้นใช้ฟังก์ชั่นที่กำหนดเองข้างต้นเพื่อพิจารณาว่าไฟล์เป็นไปตามข้อกำหนดของภาพหรือไม่ หากเป็นไฟล์โทรจันที่ปลอมตัว FSO จะลบออกตัวอย่างเช่น:
คัดลอกรหัสดังนี้: file.saveasserver.mappath (ชื่อไฟล์) 'บันทึกไฟล์
ifnotcheckFileType (server.mappath (ชื่อไฟล์)) จากนั้น