Autoriser ou refuser des types de fichiers dans WordPress

Le type MIME

Lors de l’ajout de fichiers au sein d’un site WordPress, son type MIME est analysé. Le type MIME correspond au type de chaque fichier (PDF, JPG, MP3, etc.) et sa notation est codifiée. Son analyse permet de s’assurer que le fichier est bien ce qu’il est sensé être, pour des raisons de sécurité notamment.

Par défaut, une installation de base de WordPress autorise un très grand nombre de type de fichiers. Vous pouvez trouver cette liste sur la page dédiée du Codex.

Utiliser une fonction

Si vous souhaitez ajouter ou enlever un type de fichier de cette liste, vous pouvez le faire via un hook.

Pour cela, il faudra créer une fonction, soit dans le fichier functions.php ou sous la forme d’un plugin.

Imaginons que vous souhaitez intégrer des fichiers SVG dans votre site, sans modifications de votre installation, un message d’erreur s’affichera :

Le message d'erreur lors de l'envoi d'un type de fichier non autorisé dans WordPress
Le message d’erreur lors de l’envoi d’un type de fichier non autorisé dans WordPress

Vous pouvez donc utiliser la fonction suivante qui, pour l’exemple, autorise l’upload de fichiers SVG et interdit les fichiers PDF :

function custom_mime_types( $mimes ){
        // Autoriser les fichiers svg
        $mimes['svg'] = 'image/svg+xml'; 

        // Interdire les fichiers pdf
        unset( $mimes['pdf'] );
        return $mimes;
}
add_filter('upload_mimes', 'custom_mime_types', 1, 1);

La fonction custom_mime_types s’éxécute lorsque le hook upload_mimes est appelé (lors de l’ajout de fichiers dans la bibliothèque de medias par exemple) et permet la manipulation des types MIME des fichiers.

Il est fortement déconseillé de permettre l’upload de fichiers éxécutables pour des raisons évidentes de sécurité.

La méthode « bourrin »

Bien que cette solution ne soit pas recommandée, il est possible d’autoriser d’emblée tous les types de fichiers sur une installation WordPress. Cela se fait en ajoutant la ligne suivante dans le wp-config.php :

define('ALLOW_UNFILTERED_UPLOADS', true); 

Cette ligne permet de supprimer les contrôles du CMS sur le type de fichier, n’utilisez cette fonction que si vous savez ce que vous faites et en évitant de le faire sur un site en production.