La vulnérabilité de téléchargement ASP que j'entends souvent est de télécharger certains fichiers de Troie en modifiant le nom du suffixe (le modifiant en suffixe de fichiers d'image) et en les téléchargeant.
Pour cette situation, utilisez les fonctions suivantes pour distinguer:
La copie de code est la suivante:
<%
'**********************************************************************************
«La fonction de chèque est utilisée pour vérifier si le fichier est un fichier image
'Le nom de fichier du paramètre est le chemin d'accès au fichier local
'S'il s'agit d'un fichier jpeg, gif, bmp, png image, la fonction renvoie true, sinon il renvoie 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) = cbyte (& h61)
FonctionCheckFileType (nom de fichier)
onerrorresumenext
CheckFileType = false
dimfstream, filext, tampon, i
FileExt = mid (nom de fichier, instrrère (nom de fichier, ".") + 1)
setfstream = server.createObject ("adodb.stream")
fstream.open
fstream.type = adtypebinar
fstream.loadfromfilefilename
fstream.position = 0
selectCaseFileExt
cas "jpg", "jpeg"
Stamp = fstream.read (2)
fori = 0to1
ifacb (midb (tampon, i + 1,1)) = jpg (i) alorsCheckFileType = TrueELSECHECKFileType = false
suivant
cas "gif"
Stamp = fstream.read (6)
fori = 0to5
ifacb (midb (tampon, i + 1,1)) = gif (i) thencheckfileType = TrueElSheckEckFileType = false
suivant
cas "png"
Stamp = fstream.read (4)
fori = 0to3
ifacb (midb (tampon, i + 1,1)) = png (i) thencheckFileType = TrueELSECheckFileType = false
suivant
cas "bmp"
Stamp = fstream.read (2)
fori = 0to1
ifacb (midb (tampon, i + 1,1)) = bmp (i) thencheckFileType = TrueElSeCheckFileType = false
suivant
se licez
fstream.close
setfsetem = rien
iferr.number <> 0TheNcheckFileType = false
finition de fin
%>
Puis lors de l'application
La copie de code est la suivante: CheckFileType (server.mappath ("cnbruce.jpg"))
ou
CheckFileType ("f: /web/164/images/cnbruce.jpg")) Quoi qu'il en soit, c'est pour détecter le type de fichier d'image qui vérifie l'adresse physique locale et renvoie une valeur vraie ou false
Par conséquent, cette situation est utilisée dans le téléchargement d'images. La méthode actuelle consiste à permettre d'abord le téléchargement du fichier "pseudo-image", puis d'utiliser la fonction personnalisée ci-dessus pour déterminer si le fichier est conforme aux spécifications de l'image. S'il s'agit d'un fichier d'image déguisé en Troie, FSO le supprimera, par exemple:
Copiez le code comme suit: file.saveasserver.mappath (nom de fichier) 'Enregistrer le fichier
IfotcheckFileType (server.mappath (nom de fichier)) puis