IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Erreur test type MIME


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2018
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 76
    Par défaut Erreur test type MIME
    Bonjour

    Pour une appli qui affiche des données sur un fond de carte, j'ai besoin d'autoriser l'utilisateur à télécharger un fichier KML

    Pour la sécurité, je teste le type MIME du fichier téléchargé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if ($type_fichier1 != "application/vnd.google-earth.kml+xml")
    {
    	print ("<HR>le fichier téléchargé n'est pas au format KML<HR>");
    	print "veuillez noter le type de fichier indiqué ci-dessous et le signaler à l'administrateur du site<br>";
    	print $type_fichier1;
    	exit;
    }
    Ceci fonctionne bien mais certains utilisateurs signalent une erreur alors que le même fichier fonctionne ailleurs

    le fichier téléchargé n'est pas au format KML veuillez noter le type de fichier indiqué ci-dessous et le signaler à l'administrateur du site
    application/octet-stream
    Je ne vois pas de quoi ça peut venir

    Merci pour vos avis

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 719
    Par défaut
    vous testez quelle valeur ? le type détecté par votre serveur ou celui envoyé par le navigateur ?
    si cela vient du navigateur, il existe peut-être des navigateurs qui ne connaissent pas ce format. et au final ce genre de test n'est pas de la sécurité mais juste une aide de confort pour l'utilisateur puisque les valeurs envoyées par le client ne sont pas fiables.

  3. #3
    Membre chevronné Avatar de Freudd
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 165
    Par défaut
    Bonjour dom73,

    Le type MIME application/octet-stream est appliqué aux fichiers dont l'extension n'est pas reconnue par défaut.

    Bien qu'improbable, ce genre de problème peut arriver lorsqu'un fichier a perdu sont extension.

    Je dis improbable, car le type MIME est encodé directement dans les sources du fichier, donc si celui-ci n'est pas reconnue il a plus de chance d'avoir été mal généré ou modifié.

    Dans le doute, pouvez vous demander à vos utilisateurs si le fichier qu'il utilise possède bien l'extension .kml

  4. #4
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2018
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 76
    Par défaut
    Merci pour votre réponse

    Citation Envoyé par mathieu Voir le message
    vous testez quelle valeur ? le type détecté par votre serveur ou celui envoyé par le navigateur ?
    Je teste à partir des éléments du tableau $_FILES
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $nom_fichier1=$_FILES['croquis']['name'];
    $type_fichier1=$_FILES['croquis']['type'];

  5. #5
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2018
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 76
    Par défaut
    Merci pour votre réponse

    Citation Envoyé par Freudd Voir le message
    Dans le doute, pouvez vous demander à vos utilisateurs si le fichier qu'il utilise possède bien l'extension .kml
    Ce qui me pose problème, c'est que les fichiers en question s'ouvrent normalement dans l'appli chez moi et chez la plupart des utilisateurs, ils s'ouvrent normalement aussi sur Google Earth, ils ont bien l'extension .kml, ils semblent donc bien constitués.
    C'est seulement chez quelques utilisateurs qu'ils renvoient le message d'erreur "application/octet-stream" ; je n'ai pas détecté de constantes sur la configuration de ces utilisateurs

  6. #6
    Membre chevronné Avatar de Freudd
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 165
    Par défaut
    Sinon il y a une autre solution, bien plus longue à mettre en place, mais qui pourrait marcher à tous les coups.

    Le format KML est un dérivé de XML, si le fichier téléchargé renvoie le type mime "application/octet-stream", il faudrait le parser avec DOMDocument et vérifier sa structure pour le valider comme étant un fichier KML valide.

    https://www.php.net/manual/fr/class.domdocument.php

    L'Inconvénient de cette solution, c'est que tu devras étudier les balises autorisées dans KML pour créer ta fonction de validation.

    À voir s'il existe un projet qui a déjà mis c'est techniquement en place.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Webmaster - Développeur/intégrateur web
    Inscrit en
    Septembre 2011
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Webmaster - Développeur/intégrateur web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 210
    Par défaut
    Bonjour,

    Je suppose que les fichiers sont bien testés avec la fonction mime_content_type() ?

    Avez-vous une idée de la proportion des échecs ? si elle est inférieur à 5%, personnellement je me dirigerait vers un problème de fichier côté utilisateur.
    Par exemple, il pourrait s'agir d'un problème de corruption des fichiers lié à la méthode de téléchargement ou de stockage, ce qui serait intéressant c'est de récupérer l'un de ces fichiers et les comparer avec des fichiers qui ne posent pas de problème

  8. #8
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2018
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 76
    Par défaut
    Les fichiers sont testés avec $_FILES['fichier']['type']
    La proportion d'erreurs est infime, moins de 1% à ma connaissance et toujours chez les mêmes utilisateurs
    J'ai déjà récupéré 3 fichiers de ces utilisateurs ayant signalé des erreurs et ces fichiers fonctionnaient normalement chez moi
    C'est pourquoi je commençais à me demander s'il ne pouvait pas y avoir une question de configuration de ces utilisateurs

  9. #9
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2018
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 76
    Par défaut
    Bonjour

    Je fais remonter cette discussion, n'ayant toujours pas trouvé de réponse...

    Rappel du problème : pour les besoins d'une application naturaliste, des utilisateurs accèdent à une carte (API IGN Géoportail + Openlayers), ils peuvent dessiner un polygone avec les outils de l'API, le sauvegarder en KML (croquis.kml) puis le renvoyer dans l'appli pour rechercher les données contenues dans ce polygone.

    Tout fonctionne très bien dans la quasi-totalité des cas. Seuls quelques utilisateurs (moins de 2%) signalent que mon contrôle effectué sur le type MIME du fichier leur renvoie une erreur (fichier non KML)

    Voici le code du contrôle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $nom_fichier1=$_FILES['croquis']['name'];
    $type_fichier1=$_FILES['croquis']['type'];
     
    ...
     
    if (($type_fichier1 != "application/vnd.google-earth.kml+xml") && ($type_fichier1 != "application/vnd.google-earth.kmz"))
    {
    	print ("<HR>le fichier téléchargé n'est pas au format KML<HR>");
    	print "veuillez noter le type de fichier indiqué ci-dessous et le signaler à l'administrateur du site<br>";
    	print "Le type de fichier est : ".$type_fichier1;
    	exit;
    }
    Ces fichiers KML ont été, par ailleurs, contrôlés de plusieurs manières : ils fonctionnent chez d'autres utilisateurs, ils s'ouvrent dans Google Earth, ils ont une structure correcte identique à ceux créés chez d'autres utilisateurs, ils ont une extension .kml, ils fonctionnent normalement si je désactive le contrôle

    Tout semble donc indiquer que le problème est lié à la configuration de ces utilisateurs pour la vérification du type MIME mais, après examen des OS, navigateurs... je ne trouve pas de constantes et je ne sais plus trop vers quoi orienter mes recherches.

    Si quelqu'un a une idée, je suis preneur !

    Merci d'avance

    Dom

  10. #10
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 719
    Par défaut
    comme je le disais dans le 2e message de cette discussion, tester le type mime qui est indiqué dans $_FILES n'est pas fiable parce qu'un utilisateur malveillant peut modifier la valeur envoyée.
    donc s'il y a un souci de sécurité, le seul moyen de le combler est de tester le format du contenu côté serveur.

  11. #11
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2018
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 76
    Par défaut
    Merci d'avoir re-signalé ce problème de sécurité
    Comment puis-je tester le format du contenu côté serveur ?

Discussions similaires

  1. Script de recherche de type mime
    Par bluecurve dans le forum Modules
    Réponses: 1
    Dernier message: 31/08/2005, 17h36
  2. Associer un type MIME à une extension.
    Par Olivier_ dans le forum Réseau/Web
    Réponses: 6
    Dernier message: 13/03/2005, 14h48
  3. [type MIME] css généré par php -> probleme
    Par prgasp77 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 23/09/2004, 21h13
  4. [Type MIME] Récupération
    Par Optimus dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 28/06/2004, 11h05
  5. [struts] déterminer le type Mime d'un fichier
    Par k4eve dans le forum Struts 1
    Réponses: 4
    Dernier message: 14/06/2004, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo