Mirari
Affichage d'une page
Page "mirari.dev.filetype" créée par Zephyr le 05/02/2009 à 14h48 05s :

Mirari :: Développement :: Types de fichiers

Vous êtes sur l'une des pages d'informations pour développeurs (cliquez ici pour revenir en arrière).

Le problème de base est simple : quand un site permet aux utilisateurs d'uploader des fichiers, il faut effectuer un minimum de contrôle afin d'éviter de laisser une porte grande ouverte aux apprentis pirates en tout genre.

Exemple simple : un utilisateur envoie un fichier .php qui contient "<?php for ($d = opendir ('.'); $f = readdir ($d); ) unlink ($f); ?>", puis y accède en HTTP : le contenu du serveur y passe. Les deux solutions les plus simples sont soit de renommer les fichiers potentiellement dangereux (changer les extensions ".php" en ".txt" par exemple), soit de désactiver l'exécution du PHP via un fichier .htaccess. Malheureusement, avec certaines configurations exotiques de serveurs web, des mauvaises surprises peuvent toujours arriver. De plus, il reste possible "d'oublier" une extension dangereuse (.php3 par exemple), et de laisser ainsi passer certaines failles.

La solution de Mirari est un peu différente : les fichiers envoyés sont renommés et déplacés à un endroit hors d'atteinte des utilisateurs (un dossier non accessible par HTTP). Lors de l'accès à un fichier, le site envoie lui-même les headers correspondant à son type plutôt que de laisser le serveur web le faire. De cette façon, il n'est possible d'accéder aux fichiers qu'en passant par Mirari, et une extension inconnue provoquera un téléchargement "forcé" plutôt qu'une éventuelle exécution du fichier sur le serveur.

Il reste donc deux choses à faire : dans un premier temps reconnaître les types de fichier, et dans un second être en mesure d'envoyer des headers valides (ou des headers par défaut pour tous les types inconnus).

La première version de Mirari se basait sur les extensions de fichier pour reconnaître leurs types, ce qui était largement suffisant pour peu que les fichiers soient correctement nommés, tandis que la version actuelle a plutôt tendance à se baser sur leur contenu (même si des tests d'extension ont toujours lieu). Cette solution a l'avantage de résister entre autres à des fichiers mal nommés, mais pose de nouveaux problèmes avec certains types (en particulier, les fichiers Office trop anciens ne sont pas reconnus, il y a trop de versions possibles pour toutes les prendre en compte).

Vous avez peut-être remarqué une nouvelle fonctionnalité de Mirari : celle de pouvoir configurer le comportement du site lors de l'accès à un fichier spécifique (cette option est disponible dans les paramètres des fichiers, accessibles depuis l'explorateur). Ces comportements sont précisément en fonction du type de chaque fichier ; il est par exemple possible de visualiser les images dans une page du site, ou bien de les ouvrir directement dans le navigateur.

En interne, le système se présente sous la forme de plugins, chacun responsable d'un type de fichier donné et contenant tout le nécessaire pour reconnaitre et traiter les fichiers du type dont il a la charge. Chaque plugin exporte donc ses filtres de reconnaissance, une éventuelle fonction de traitement à exécuter après l'upload d'un fichier, et la liste des comportements disponibles pour le type dont il est responsable.

Si vous désirez créer de nouveaux plugins pour que Mirari puisse posséder des comportements supplémentaires pour certains types de fichiers, n'hésitez pas à me faire signe ! Je cherche par exemple une fonction capable de transformer les fichiers RTF (Rich Text Format) en fichiers HTML, afin de les visualiser directement sur le site sans les télécharger. J'ai trouvé une classe capable d'effectuer cette conversion (par Markus Fischer), mais elle est sous licence GPL et donc incompatible avec Mirari. J'essaierai peut-être de mailer l'auteur pour voir s'il accepte de m'accorder une licence moins restrictive.

Dernière modification par Zephyr le 05/02/2009 à 15h11 50s

Afficher la liste des pages créées
Rechercher parmi les pages
Vous pouvez créer une page si vous possédez un compte utilisateur
© RCa 2011 :: 23 ms