Mime Type Jpeg/JPG sous IE6
30 juin 2009 par: Benoit BonnevilleLe mime type, description du contenu d’un fichier, est original sous Internet Explorer 6, il s’agit de image/pjpeg au lieu de image/jpeg.
Encore une originalité de Microsoft qui peu provoquer différents bugs dans les gestions de contenu images.
Ce navigateur est peu être révolu, mais il continu d’être utilisé par plus de 10% des utilisateurs, ce bug est donc à prendre en compte.
Voici un exemple de formulaire PhP présentant ce bug.
Déposer un fichier
Les formulaires web de dépôt de fichier sur serveur sont standardisés par le W3C et respecté par l’ensemble des navigateurs.
ses formulaires dit d’upload de fichiers sont reconnaissable par leur type : multipart/form-data.
Ils permettent à la méthode HTTP : POST d’envoyer des fichiers en provenance de l’ordinateur du client web, pour les déposer sur un serveur web distant.
Du coté serveur il est possible de récupérer les informations sur le fichier envoyé. Cette manière diffère en fonction du choix des scripts web (PHP,J2EE,ASP ,etc)
Dans tout les cas il vous est possible de récupérer le contenu du fichier, son nom et son type MIME.
Le type MIME
Le type MIME permet de déterminer le type de contenu du fichier. Exemple de type MIME :
image/jpeg, image/png, …
C’est ici qu’il faut faire attention, car le type MIME disponible, à été généré par le navigateur web du visiteur. Vous ne pouvez pas complètement vous y fier, car il peu avoir été modifier par un programme tiers.
Exemples
- un virus sur le pc de l’utilisateur.
- un hacker qui essayer de vous faire croire autre chose.
- un navigateur qui envoie n’importe quoi.
C’est notamment le cas d’Internet Explorer 6 (IE6)
pour Internet Explorer, le type MIME d’une image jpeg (extension jpg), est image/pjpeg, alors que pour les autres navigateurs, ce type est bien évidement image/jpeg
Etre sûr du contenu
La seule solution est de demander à votre serveur de tester le contenu.
Exemple PHP:
Le fichier uploadé est alors disponible dans le tableau $_FILES['index']
. Vous aurez alors accès au nom du fichier, à son emplacement temporaire sur le serveur, sa taille, un message d’erreur potentiel ET le type MIME.
Vous ne devez donc pas faire une totale confiance à celui-ci et devez le vérifier par vous même.
Si votre fichier est une image, PhP vous propose une solution simple avec la library GD :
getimagesize() peu recevoir en paramètre un nom de fichier, et retourne différentes informations, dont le type MIME (cf API).
A vous de passer en paramètre le chemin d’accès temporaire au fichier, et vous aurez la certitude qu’il s’agit bien d’une image et de quelle type est elle.