Je souhaite valider le type de fichier pour vous assurer que l'utilisateur télécharge une image de type JPEG, GIF ou PNG. Au lieu de vérifier l'extension de fichier, j'ai figuré à l'aide de httppostedfile.contenttype serait plus sûr car il vérifie le type de contenu MIME.
protected void cvValidateImageType_ServerValidate(object source, ServerValidateEventArgs args) { if (fupImage.HasFile) { args.IsValid = (fupImage.PostedFile.ContentType.ToLower() == "image/jpg" || fupImage.PostedFile.ContentType.ToLower() == "image/jpeg" || fupImage.PostedFile.ContentType.ToLower() == "image/pjpeg" || fupImage.PostedFile.ContentType.ToLower() == "image/gif" || fupImage.PostedFile.ContentType.ToLower() == "image/x-png" || fupImage.PostedFile.ContentType.ToLower() == "image/png"); } else args.IsValid = true; }
3 Réponses :
L'utilisation de l'extension est probablement plus sûre. Le contenuType est envoyé dans la demande HTTP du client. Si vous testez pour l'extension, l'utilisateur peut modifier l'extension d'un exe vers JPG, mais elle ne fonctionnera pas comme une exe. P>
À la fois à l'aide de l'extension et des en-têtes HTTP sont également peu fiables, car ils peuvent tous les deux être simulés, soit par un attaquant malveillant utilisant des demandes HTTP brutes, soit par un utilisateur de navigateur innocent, sélectionnant un fichier mal nommé incorrect. Si vous souhaitez être certain, vous devez craquer le fichier ouvert et analyser le contenu, il n'y a pas d'autre moyen. P>
Pour connaître de manière fiable le type de contenu, vous voudrez peut-être examiner le type de contenu reniflant, par exemple: P>
http://suika.fam.cx/www/ Markup / HTML / WhaTPM / WhatPM / contenttype.html P>
Ceci essaie de déterminer le type de contenu du fichier en examinant les premiers octets. P>