17.14 MIME

17.14.1 Détection des type MIME

Lors de l'insertion d'un fichier dans le vault, son type MIME est détecté et stocké en base de données aux côtés de son identifiant dans le vault (vid).

On distingue deux notions sous le terme de type MIME :

  • type MIME textuel (e.g. OpenDocument Text) : description du type du fichier dans un format "humain",
  • type MIME système (e.g. application/vnd.oasis.opendocument.text) : type MIME du fichier au format "machine" (tel que défini par le registre IANA par exemple).

Ce chapitre détaille les fonctions de détection du type MIME des fichiers.

17.14.1.1 Type MIME textuel (getTextMimeFile())

Le type MIME textuel est obtenu via l'utilisation de la fonction getTextMimeFile() qui prend les arguments suivants :

(string) filePath
Le chemin d'accès du fichier dont on souhaite obtenir le type MIME textuel (e.g. /tmp/123DF423/rapport-FZ447BV.doc).
(string) fileName (optionnel)

Le nom du fichier (e.g. rapport.doc).

Par défaut, le nom est vide.

La détection se base en premier sur le nom du fichier (voir Paramétrage de la détection par le nom du fichier ci- dessous). Si le type MIME ne peut pas être déduit à partir du nom du fichier, alors la détection se base sur le contenu du fichier (via la commande système file).

17.14.1.2 Type MIME système (getSysMimeFile())

Le type MIME système est obtenu via l'utilisation de la fonction getSysMimeFile() qui prend les arguments suivants :

(string) filePath
Le chemin d'accès au fichier dont on souhaite obtenir le type MIME textuel (e.g. /tmp/123DF423/rapport-FZ447BV.doc).
(string) fileName (optionnel)

Le nom du fichier (e.g. rapport.doc).

Par défaut, le nom est vide.

La détection se base en premier sur le nom du fichier (voir Paramétrage de la détection par le nom du fichier ci- dessous). Si le type MIME ne peut pas être déduit à partir du nom du fichier, alors la détection se base sur le contenu du fichier (via la commande système file).

17.14.1.3 Paramétrage de la détection par le nom du fichier

La détection du type MIME textuel et du type MIME système est paramétrable via des règles appliquées sur l'extension du nom du fichier.

Ces règles sont décrites au format XML dans le fichier config/user-mime.conf.

Un fichier d'exemple est fournit par défaut dans config/user-mime.conf.sample.

Exemple de définition des types MIME textuel et système pour les fichiers d'extension .foo et .bar :

<?xml version="1.0" encoding="utf-8"?>
<mimes>
  <mime ext="foo" sys="application/foo" text="Foo file" />
  <mime ext="bar" sys="application/bar" text="Bar file" />
</mimes>

Chaque règle est décrite à l'aide d'un élément <mime/> comportant l'extension (sans le point de l'extension) sur laquelle elle s'applique (attribut ext) et le type MIME textuel et système correspond qui est retourné (attribut text et sys).

Les règles sont évaluées dans l'ordre d'écriture dans le fichier XML. La détection s'arrête à la première règle qui correspond à l'extension du fichier.

Les règles du fichier config/user-mime.conf sont évaluées en priorités par rapport au jeu de règles fournit par défaut par Dynacase (consultable dans le fichier config/mime.conf).

17.14.2 Contrôle des types MIME servis inline

Lors de l'utilisation des fonctions Http_Download() et Http_DownloadFile(), il est possible de demander que le téléchargement soit fait en mode attachment ou en mode inline.

Le mode attachment permet d'indiquer au navigateur que le contenu doit être sauvegardé dans une fichier. Ce mode déclenche l'ouverture d'une boite de dialogue par le navigateur afin que l'utilisateur choisisse le nom du fichier dans lequel sera enregistré le contenu.

Le mode inline permet d'indiquer au navigateur qu'il peut interpréter et rendre le contenu directement s'il sait le gérer (e.g. images, HTML, etc.). Si le navigateur ne sait pas gérer le contenu, alors le fichier sera enregistré comme avec le mode attachment.

Cependant, l'utilisation du mode inline peut poser des problèmes de sécurité dans le cas ou la donnée ou le fichier servit provient d'un utilisateur tiers.

Afin de limiter ces problèmes de sécurité, certains type MIME sont donc interdits d'êtres servis en mode inline lors de l'utilisation des fonctions Http_Download() et Http_DownloadFile(), même lorsque le mode inline est explicitement demandé.

La configuration des types MIME autorisés/interdits en inline est décrite dans la section Paramétrage des téléchargements inline ci-dessous.

17.14.2.1 Paramétrage des téléchargements inline

Afin de réduire le risque d'exécution de contenus malveillants qui pourraient être contenus dans des fichiers, certains type MIME de fichiers ne sont pas autorisés à être servis en mode « inline », et sont donc forcés en mode « attachment » afin que le navigateur présente une boite de dialogue pour sauver le fichiers.

Dynacase fournit par défaut une liste de type MIME autorisés/interdits a être servis en inline dans le fichier de configuration statique config/file-mime.xml.

Pour modifier la liste de ces types MIME autorisés/interdits, il faut créer un fichier config/file-mime-user.xml avec les règles, pour un type donné, à remplacer ou à ajouter par rapport au fichier statique par défaut config/file-mime.xml.

Exemple de fichier config/file-mime-user.xml :

<?xml version="1.0" encoding="utf-8"?>
<rules>
  <inline>
    <deny type="text/html" comment="HTML" />
    <deny type="application/xhtml+xml" comment="XHTML" />
    <deny type="image/svg" comment="SVG" />
    <deny type="image/svg+xml" comment="SVG" />
    <deny type="application/hta" comment="Microsoft HTML Application" />
    <deny type="application/x-xpinstall" comment="Mozilla XPI extensions" />
    <deny type="application/vnd.mozilla.xul+xml" comment="Mozilla XUL" />
    <deny type="application/x-shockwave-flash" comment="Adobe Flash" />
    <allow type="*/*" />
  </inline>
</rule>

Les types MIME autorisés ou interdits à être servis en « inline » sont décrit à l'aide d'un élément <allow /> (autoriser) ou <deny /> (interdire) avec le type MIME correspondant déclaré dans la propriété type.

La propriété type doit être de la forme suivante :

  • [type] . "/" . [subtype] : pour cibler un type et son subtype. Ex. : application/foo ;
  • [type] . "/*" : pour ne cibler d'un type (en acceptant n'importe quel subtype). Ex. application/* ;
  • "*/*" : pour cibler n'importe quel type et subtype. Ex. */*.

Lees règles sont évalués par ordre décroissant de spécificité du type MIME et l'évaluation s'arrête au premier type MIME qui correspond.

Ordre de spécificité de type : * "xxx/xxx" : évalué en premier ; * "xxx/" : évalué en second ; * "/*" : évalué en derner.

×
nouveauté