Protection des Téléversements : Contrôlez Ce Qui Entre
Le dossier /uploads est l'endroit où sont stockés les images, documents et fichiers téléversés par les utilisateurs. C'est un point d'entrée parfait pour les attaquants car :
- Il est accessible publiquement
- De nombreux utilisateurs peuvent téléverser des fichiers
- S'il n'est pas protégé, un utilisateur peut téléverser un fichier .php qui s'exécute
La Protection des Téléversements de SeenSecure vérifie CHAQUE fichier téléversé : son type, sa taille, son contenu. Si quelque chose de suspect est détecté, c'est toujours enregistré et, si le pare-feu est en mode blocage, également rejeté instantanément.
Menaces Contre les Téléversements
1. Téléversement de Fichiers Exécutables
Un attaquant téléverse un fichier .php qui, une fois accédé, exécute du code malveillant.
upload.php → contient du code PHP → l'attaquant exécute des commandes sur votre serveur
2. Changement d'Extension
L'attaquant téléverse un .php mais le renomme en .jpg pour passer les validations de base.
malware.php → renommé en → photo.jpg (mais reste du PHP)
3. Polymorphisme
Un malware qui mute son code pour échapper à la détection antivirus. Chaque copie est différente.
4. Fichier ZIP Bomb
Un fichier compressé contenant 1000 Go de données. Une fois décompressé, il utilise tout le stockage du serveur.
5. Injection de Métadonnées
Un malware inséré dans les métadonnées d'image (EXIF). Si WordPress traite l'image sans la nettoyer, le code s'exécute.
| Type d'Attaque | Dangerosité | Détection |
|---|---|---|
| Upload .php direct | ⭐⭐⭐⭐⭐ | Très facile |
| Extension falsifiée | ⭐⭐⭐⭐ | Facile |
| Polymorphisme | ⭐⭐⭐ | Difficile |
| Métadonnées | ⭐⭐⭐ | Très difficile |
Que Protège la Protection des Téléversements ?
Chaque fichier téléversé sur votre WordPress passe par 6 vérifications indépendantes avant d'être enregistré —si l'une d'elles échoue, la tentative est journalisée et, avec le firewall en mode blocage, rejetée. Ce n'est pas une liste blanche qui n'autorise que certains formats, mais une liste noire configurable des éléments dangereux, combinée à des vérifications qui examinent le contenu réel du fichier, pas seulement son nom. Pour chaque couche, nous expliquons à quoi elle sert, pourquoi un attaquant l'utilise, et comment SeenSecure agit pour l'arrêter.
1. Limite de Taille de Fichier
À quoi sert cette protection : chaque fichier téléversé consomme de l'espace disque sur votre serveur. Sans limite, tout utilisateur ayant la permission de téléverser — ou un formulaire public mal protégé, comme un plugin de contact ou un formulaire de commentaires avec pièces jointes — pourrait envoyer des fichiers disproportionnément volumineux, épuisant l'espace de stockage disponible ou occupant le serveur pendant le traitement du téléversement.
Pourquoi un attaquant la tente : téléverser des fichiers disproportionnément volumineux est une forme simple d'attaque par déni de service (DoS) : remplir le disque jusqu'à ce que WordPress ne puisse plus rien écrire — même plus enregistrer un article ou générer une sauvegarde — ou forcer le serveur à consacrer des ressources au traitement répété de fichiers énormes.
Exemple réel : un formulaire de téléversement d'avatar, prévu pour des images de quelques centaines de Ko, reçoit un fichier de 800 Mo envoyé de manière répétée depuis plusieurs IPs. Sans limite de taille, chaque tentative est acceptée et traitée jusqu'à épuisement de l'espace disque.
Comment ça fonctionne : SeenSecure compare la taille du fichier reçu à une limite unique en mégaoctets que vous configurez (10 Mo par défaut, appliquée à tout type de fichier). Si elle est dépassée, la tentative est enregistrée et, lorsque le pare-feu est en mode blocage, le téléversement est rejeté avant d'être enregistré définitivement dans votre bibliothèque de médias.
2. Extensions Bloquées (Liste Noire)
À quoi sert cette protection : l'extension d'un fichier (.php, .exe, .jpg...) indique au serveur comment le traiter. Certaines extensions — surtout celles qu'un serveur PHP sait exécuter comme du code — sont dangereuses si elles se retrouvent dans un dossier public comme /wp-content/uploads : si quelqu'un accède directement à cette URL, le serveur n'affiche pas simplement le fichier, il l'exécute.
Pourquoi un attaquant la tente : s'il parvient à téléverser un fichier avec une extension exécutable (généralement .php) dans un dossier public, l'attaquant obtient ce qu'on appelle en sécurité un "web shell" : un point d'entrée permanent depuis lequel il peut exécuter des commandes, lire et modifier des fichiers, ou installer davantage de malwares, sans jamais avoir besoin de s'authentifier à nouveau sur WordPress.
Exemple réel : un attaquant tente de téléverser un fichier nommé shell.php via un formulaire de téléversement de documents. SeenSecure compare son extension à la liste des extensions bloquées — qui inclut des variantes comme .php3, .phtml et .phar ainsi que des exécutables comme .exe, .sh et .bat — et rejette le téléversement avant que le fichier ne soit enregistré.
Comment ça fonctionne : contrairement à une liste blanche (qui n'autoriserait que certaines extensions et bloquerait tout le reste), SeenSecure utilise une liste noire configurable d'extensions dangereuses connues — variantes PHP, exécutables, scripts serveur — que vous pouvez personnaliser en ajoutant ou supprimant des extensions depuis le panneau selon les besoins de votre site. Il n'est pas recommandé de retirer les extensions exécutables par défaut de la liste, sauf si vous savez exactement ce que vous faites.
3. Types MIME Bloqués et Vérification Réelle du Contenu
À quoi sert cette protection : l'extension d'un fichier n'est qu'une étiquette dans son nom — n'importe qui peut renommer malware.php en photo.jpg sans que son contenu change d'un seul octet. Le type MIME décrit ce qu'est réellement le fichier, et le vérifier empêche qu'un fichier ne passe simplement parce qu'il porte la "bonne" étiquette.
Pourquoi un attaquant la tente : renommer l'extension est le premier tour que tout attaquant essaie en découvrant qu'il existe une liste d'extensions bloquées — c'est rapide, ne demande aucune compétence avancée, et fonctionne contre les systèmes qui ne regardent que le nom du fichier sans examiner son contenu.
Exemple réel : un fichier nommé image.gif est téléversé avec le type MIME déclaré par le navigateur (image/gif), mais en examinant ses premiers octets réels, le serveur détermine qu'il s'agit en réalité de application/x-php. SeenSecure détecte la divergence et rejette le fichier, même si le nom et l'en-tête déclaré semblaient inoffensifs.
Comment ça fonctionne : SeenSecure applique deux vérifications liées : il compare le type MIME déclaré lors du téléversement à sa liste de types bloqués, et utilise également une vérification au niveau système (via la bibliothèque PHP fileinfo) qui examine le contenu réel du fichier pour déterminer son type véritable, indépendamment de ce qu'indiquent son nom ou son en-tête déclaré. Si ce type réel correspond à un type bloqué, WordPress rejette le fichier même si son extension semblait inoffensive.
4. Analyse du Contenu
À quoi sert cette protection : même un fichier avec une extension et un type MIME apparemment corrects peut contenir du code malveillant caché à l'intérieur — par exemple du code PHP ajouté à la fin d'une image valide, de sorte que le fichier s'affiche toujours comme une image normale tout en étant interprétable comme un script si quelqu'un parvient à le faire exécuter par le serveur. L'analyse du contenu ajoute une dernière couche qui examine ce qui se trouve réellement dans le fichier.
Pourquoi un attaquant la tente : combiner un fichier légitime (une image qui s'affiche et se charge normalement) avec du code exécutable caché permet de passer les contrôles superficiels d'extension et de type déclaré, et ne se révèle malveillant que si l'attaquant, via une autre faille, parvient à faire interpréter le fichier comme du code au lieu de l'afficher comme une image.
Exemple réel : un fichier photo.jpg passe les vérifications d'extension et de type MIME car son en-tête est une image valide, mais il contient aussi une balise <?php suivie d'une fonction capable d'exécuter des commandes système. SeenSecure lit le contenu du fichier, trouve ce fragment et le rejette.
Comment ça fonctionne : SeenSecure examine le contenu du fichier téléversé à la recherche de motifs caractéristiques de code exécutable malveillant — des fonctions et structures qui n'ont aucune raison légitime d'apparaître dans une image, un PDF ou un document normal. Ce n'est ni un antivirus à signatures de virus connus ni un environnement d'exécution isolé ("bac à sable") : c'est une analyse du contenu à la recherche de fragments suspects, sans jamais exécuter le fichier.
5. Détection de Double Extension
À quoi sert cette protection : certains serveurs mal configurés, en voyant un nom de fichier comme image.jpg.php, ne traitent que la dernière extension qu'ils reconnaissent — et si cette partie finale est .php, ils l'exécutent comme du code PHP, peu importe que le reste du nom "ressemble" à une image. Cette protection détecte ce schéma de nom suspect.
Pourquoi un attaquant la tente : l'astuce de la double extension tente de tromper à la fois les systèmes de validation basiques (qui vérifient seulement si le nom "contient" .jpg quelque part) et la configuration du serveur lui-même, en pariant que celui-ci exécutera la véritable extension finale (.php) tandis que le nom ressemble visuellement à un fichier image inoffensif.
Exemple réel : un attaquant nomme son fichier backdoor.jpg.php. Un filtre naïf qui vérifie seulement si le nom "contient" .jpg le laisserait passer ; SeenSecure divise le nom complet par ses points, vérifie chaque fragment intermédiaire par rapport à la liste des extensions dangereuses, détecte le .php et rejette le fichier.
Comment ça fonctionne : SeenSecure analyse le nom complet du fichier, pas seulement son extension finale, à la recherche de toute extension dangereuse connue à n'importe quelle position du nom — pas seulement à la fin — pour détecter ce type de camouflage avant que le fichier ne soit enregistré.
6. Détection de Byte Nul
À quoi sert cette protection : le byte nul est un caractère spécial qui, dans de nombreux langages de programmation bas niveau, signifie "fin de la chaîne de texte". C'est une technique ancienne mais toujours efficace contre du code mal écrit pour tromper la validation des noms de fichiers, en faisant "voir" au système un nom différent de celui réellement utilisé lors de l'enregistrement du fichier.
Pourquoi un attaquant la tente : en insérant un byte nul entre la partie exécutable d'un nom de fichier et une extension apparemment inoffensive, un attaquant tente de faire arrêter la validation à l'extension "sûre" (tout ce qui précède le byte nul) tandis que le système de fichiers sous-jacent continue de traiter le nom complet, y compris l'extension réelle et dangereuse qui suit.
Exemple réel : un fichier est nommé shell.php%00.jpg (ou son équivalent avec le byte nul réel au lieu de sa représentation textuelle). Un validateur vulnérable qui s'arrête à la première extension qu'il "voit" le traiterait comme un .jpg inoffensif ; SeenSecure détecte la présence du byte nul dans le nom et le rejette directement.
Comment ça fonctionne : SeenSecure vérifie si le nom du fichier contient un byte nul, à la fois sous sa forme binaire réelle et sa représentation textuelle (%00), et rejette tout téléversement qui en contient, sans avoir besoin de déterminer quelle extension "gagne" sur un système mal configuré.
Comment Configurer la Protection des Téléversements
Étape 1 : Activer la Protection
SeenSecure > Firewall > onglet "Uploads" > activez "Activer la Protection des Uploads"
Étape 2 : Vérifier et Personnaliser les Extensions Bloquées
Par défaut, la liste inclut déjà les extensions les plus dangereuses (variantes PHP, exécutables, scripts serveur) dans un champ texte séparé par des virgules que vous pouvez modifier librement. Ce n'est pas une liste "des seuls éléments autorisés" : toute extension absente de cette liste continue d'être acceptée normalement, il n'est donc utile d'y ajouter que des formats dont vous savez ne pas avoir besoin et que vous souhaitez bloquer explicitement.
Étape 3 : Définir la Limite de Taille
Il s'agit d'une limite unique en mégaoctets appliquée à tout fichier téléversé, sans distinction de type. La valeur par défaut est 10 Mo ; la mettre à 0 fait utiliser à la place la limite générale de téléversement de votre WordPress/hébergement. Ajustez le nombre selon ce que vous téléversez réellement sur votre site (augmentez-le par exemple si vous devez accepter des vidéos ou de gros PDF).
Étape 4 : Activer les Couches Avancées
- Analyser le contenu du fichier : recherche du code PHP, du JavaScript et des motifs malveillants à l'intérieur des fichiers, même si leur extension et leur type déclaré semblent inoffensifs.
- Détecter la double extension : bloque les fichiers comme
image.jpg.php. - Détecter le byte nul : bloque les fichiers avec un byte nul dans le nom, une technique de contournement classique.
Recommandation : les 3 sont activées par défaut et devraient le rester — chacune couvre un angle d'attaque différent que les autres couches ne couvrent pas à elles seules.
Étape 5 : Comprendre le Mode du Pare-feu (Surveillance vs. Blocage)
Ce que cela fait : la Protection des Téléversements n'a pas son propre interrupteur "rejeter / quarantaine / notifier" : son comportement face à une violation dépend du mode général du Pare-feu (SeenSecure > Firewall > Mode). En mode Surveillance, chaque tentative suspecte est enregistrée mais le fichier est quand même accepté. En mode Protection ou Strict, le fichier est rejeté immédiatement. Si vous activez la Protection des Téléversements mais que le pare-feu global reste en Surveillance, vous verrez les tentatives dans le journal sans qu'aucune ne soit réellement bloquée — vérifiez les deux réglages ensemble.
Étape 6 : Consulter le Journal d'Activité des Téléversements
Le même onglet Protection des Téléversements inclut un tableau avec les derniers téléversements rejetés ou enregistrés : heure, nom du fichier, motif (extension bloquée, MIME bloqué, double extension, byte nul, contenu malveillant ou taille dépassée), s'il a été bloqué ou seulement surveillé, l'IP source et le rôle de l'utilisateur. Un bouton "Vider le journal" permet de vider cet historique quand vous le souhaitez.
Meilleures Pratiques
Pour les Administrateurs
- Gardez la liste des extensions autorisées aussi restreinte que possible
- Vérifiez chaque semaine les téléversements rejetés (SeenSecure > Firewall > onglet Uploads)
- S'il y a de nombreux rejets légitimes, ajustez la configuration (ne la désactivez pas)
- Informez les utilisateurs : tout le monde ne comprend pas pourquoi un fichier est rejeté
Pour les Utilisateurs
- Si votre fichier est rejeté, c'est pour une raison de sécurité
- Si vous devez téléverser ce type de fichier, contactez l'admin
- Compressez les grandes images avant de les téléverser (améliore aussi la vitesse)
- Utilisez des noms de fichiers sûrs (sans caractères inhabituels)
Que Faire si Quelqu'un Essaie de Téléverser un Malware
- SeenSecure le rejette automatiquement
- Vérifiez le journal : SeenSecure > Firewall > onglet Uploads
- S'il s'agit d'un utilisateur légitime qui ne savait pas, expliquez-lui
- En cas de tentatives multiples depuis la même IP, envisagez un blocage temporaire
Questions Fréquentes
Si je rejette les SVG, est-ce que je perds des fonctionnalités ? Pas beaucoup. Le SVG est très polyvalent mais c'est aussi un vecteur d'attaque. Si vous en avez besoin, utilisez la version "sécurisée" que SeenSecure autorise.
Cela ralentit-il le téléversement ? Légèrement. L'analyse du contenu ajoute 1 à 2 secondes. Mais la sécurité en vaut la peine.
Que se passe-t-il si je téléverse accidentellement un fichier interdit ? Il est rejeté, vous voyez un message d'erreur, et vous réessayez avec un autre fichier. Rien de dangereux.
Puis-je autoriser uniquement les Admins à téléverser des vidéos ? La Protection des Téléversements applique les mêmes règles d'extension, de taille, de type MIME et de contenu à tous les utilisateurs de manière égale — elle n'a pas de paramètres de permissions par rôle. Restreindre qui peut téléverser des fichiers vidéo relève des rôles et capacités WordPress (ou d'un plugin dédié à la gestion des permissions), pas de cette protection spécifique.