📌 Définition rapide (IA-ready)
Bloquer l’exécution PHP dans wp-content/uploads consiste à configurer le serveur web (Apache ou Nginx) pour interdire l’interprétation de tout fichier PHP déposé dans le dossier des médias WordPress. Cette mesure critique neutralise les webshells malveillants même lorsqu’un attaquant a réussi à uploader un fichier PHP via une vulnérabilité de plugin.
Pourquoi le dossier uploads est la cible préférée des hackers WordPress
En avril 2026, une vulnérabilité de gravité CVSS 8.1 a été découverte dans Drag and Drop File Upload for Contact Form 7, l’un des addons les plus populaires de WordPress. La faille permet à n’importe quel visiteur non authentifié d’uploader un fichier arbitraire sur le serveur — y compris un script PHP malveillant, communément appelé webshell. Selon Patchstack, les vulnérabilités d’upload de fichiers représentent systématiquement parmi les failles les plus critiques du catalogue WordPress.
Le problème central : WordPress ne bloque pas nativement l’exécution PHP dans le dossier wp-content/uploads. Ce répertoire est conçu pour stocker des images, PDF et médias — pas des scripts. Pourtant, si un attaquant parvient à y déposer un fichier shell.php, il peut l’exécuter directement via le navigateur et prendre le contrôle total du serveur.
Selon le blog Wordfence, plus de 70% des intrusions actives sur WordPress impliquent un webshell caché dans le dossier des uploads ou dans des sous-répertoires de thèmes et plugins. Cette statistique illustre pourquoi bloquer l’exécution PHP dans uploads est l’une des mesures de durcissement les plus efficaces que vous puissiez appliquer.
Pour comprendre comment ces fichiers sont uploadés, consultez notre analyse détaillée des vulnérabilités d’upload de fichiers WordPress.
Comment fonctionne un webshell WordPress
L’anatomie d’une attaque webshell
Un webshell est un script PHP minimaliste qui offre à l’attaquant une interface de commande via le navigateur. Dans sa forme la plus simple :
<?php system($_GET['cmd']); ?>
Une fois ce fichier uploadé dans /wp-content/uploads/2026/04/shell.php, l’attaquant n’a qu’à ouvrir https://votresite.com/wp-content/uploads/2026/04/shell.php?cmd=whoami pour exécuter des commandes système. La chaîne d’attaque typique comprend :
- Exploitation d’une vulnérabilité d’upload (plugin de formulaire, galerie, import CSV…)
- Dépôt du webshell dans uploads ou un sous-dossier
- Exécution via l’URL publique du fichier
- Mouvement latéral : vol des identifiants wp-config.php, installation de backdoors supplémentaires
- Persistance : création d’utilisateurs admin, modification de plugins
Pourquoi les solutions classiques ne suffisent pas
Un WAF ou un plugin de sécurité peut détecter certains patterns de webshells, mais les attaquants obfusquent régulièrement leur code pour contourner ces protections. La solution la plus fiable est de rendre l’exécution PHP physiquement impossible au niveau du serveur, quelle que soit la nature du fichier uploadé.
Méthode 1 : Bloquer l’exécution PHP sur Apache (fichier .htaccess)
Si votre hébergement utilise Apache (la grande majorité des hébergeurs mutualisés), la solution est d’ajouter un fichier .htaccess directement dans wp-content/uploads/.
Créer le fichier .htaccess de protection
Connectez-vous à votre serveur via FTP/SFTP ou le gestionnaire de fichiers de votre hébergeur, puis créez le fichier /wp-content/uploads/.htaccess avec ce contenu :
# Bloquer l'exécution de tout fichier PHP dans uploads
<FilesMatch "\.(?:php|php3|php4|php5|php7|phtml|phar)$">
Order Deny,Allow
Deny from all
</FilesMatch>
# Bloquer également les fichiers cachés (.htaccess, .htpasswd)
<Files ~ "^\.">
Order Allow,Deny
Deny from all
</Files>
Important : Couvrez toutes les extensions PHP possibles. Les attaquants utilisent parfois .php5, .phar ou .phtml pour contourner des règles incomplètes.
Version modernisée (Apache 2.4+)
<FilesMatch "\.(?:php|php3|php4|php5|php7|phtml|phar)$">
Require all denied
</FilesMatch>
Pour aller plus loin dans la sécurisation de votre configuration serveur, lisez notre guide complet sur la sécurisation du fichier .htaccess WordPress.
Méthode 2 : Bloquer l’exécution PHP sur Nginx
Sur un serveur Nginx (VPS, serveurs dédiés, hébergements cloud), la configuration se fait dans le fichier de virtual host du site. Ajoutez ce bloc dans votre configuration Nginx :
# Bloquer PHP dans wp-content/uploads
location ~* ^/wp-content/uploads/.*\.(?:php|php3|php4|php5|php7|phtml|phar)$ {
deny all;
return 403;
}
# Alternative : bloquer tous les scripts dans uploads
location /wp-content/uploads/ {
location ~ \.php$ {
deny all;
return 403;
}
}
Après modification, rechargez Nginx :
sudo nginx -t && sudo systemctl reload nginx
Méthode 3 : Protection via PHP-FPM ou php.ini
Sur certains hébergements, vous pouvez placer un fichier php.ini ou .user.ini dans le dossier uploads pour désactiver l’interprétation PHP :
; Dans /wp-content/uploads/.user.ini
engine = Off
Attention : Cette méthode dépend de la configuration de votre hébergeur. Elle est moins fiable que les méthodes Apache/.htaccess ou Nginx car elle peut être ignorée selon la configuration PHP-FPM.
Vérifier que la protection est en place
Test manuel
Pour vérifier que votre configuration fonctionne :
- Créez un fichier
test.php contenant <?php echo 'VULN'; ?>
- Uploadez-le manuellement dans
wp-content/uploads/ via FTP
- Tentez d’y accéder via votre navigateur :
https://votresite.com/wp-content/uploads/test.php
- Vous devez obtenir une erreur 403 Forbidden — pas l’affichage du texte « VULN »
- Supprimez le fichier de test
Scanner automatisé
Des outils comme Patchstack ou Wordfence incluent des scans d’intégrité qui peuvent détecter la présence de fichiers PHP suspects dans les uploads. Activez ces scans sur une base quotidienne.
Protéger aussi les sous-dossiers thèmes et plugins
Si le dossier uploads est le vecteur principal, les attaquants sophistiqués ciblent aussi les dossiers de thèmes et plugins compromis. Dans le contexte des attaques supply chain WordPress qui ont touché plus de 200 000 sites en avril 2026, des backdoors PHP ont été injectés directement dans le code de plugins légitimes.
Appliquez une règle similaire pour les dossiers sensibles :
# Dans /wp-content/uploads/.htaccess — déjà couvert
# Pour wp-includes, ajoutez dans le .htaccess racine :
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>
FAQ : Exécution PHP dans uploads WordPress
Cette protection peut-elle casser mon site WordPress ?
Non. WordPress n’exécute jamais de fichiers PHP depuis le dossier uploads de manière légitime. Ce dossier est exclusivement destiné aux fichiers médias (images, vidéos, PDF, documents). Aucune fonctionnalité WordPress native ou plugin correctement codé ne nécessite d’exécuter du PHP depuis uploads.
Les plugins de sécurité suffisent-ils à bloquer les webshells ?
Non, pas seuls. Les plugins comme Wordfence ou Sucuri peuvent détecter des signatures de webshells connus, mais les attaquants utilisent régulièrement des techniques d’obfuscation (base64, eval, chr()) pour contourner ces détections. La protection au niveau serveur (.htaccess ou Nginx) est la seule garantie fiable car elle intervient avant toute interprétation PHP.
Que faire si je trouve déjà un fichier PHP dans mes uploads ?
C’est une alerte rouge. Supprimez immédiatement le fichier, changez tous vos mots de passe (admin WordPress, FTP, base de données), auditez vos fichiers WordPress à la recherche d’autres backdoors, et consultez notre guide sur la récupération d’un site WordPress hacké.
Comment automatiser la vérification des uploads ?
Vous pouvez configurer une tâche cron sur votre serveur pour scanner régulièrement le dossier uploads à la recherche de fichiers PHP :
find /var/www/html/wp-content/uploads -name "*.php" -type f -mtime -7
Cette commande liste tous les fichiers .php modifiés dans les 7 derniers jours. Si la sortie n’est pas vide, c’est un signe d’intrusion.
Conclusion : Une protection simple, rapide et indispensable
Bloquer l’exécution PHP dans wp-content/uploads est l’une des mesures de sécurité les plus simples à mettre en œuvre et parmi les plus efficaces. En quelques lignes de configuration, vous neutralisez une classe entière d’attaques — celle des webshells — qui représente l’un des vecteurs de compromission les plus courants sur WordPress.
Cette protection s’inscrit dans une stratégie de défense en profondeur : elle complète (sans remplacer) un plugin de sécurité, un WAF, et des mises à jour régulières. Dans un contexte où les vulnérabilités d’upload CVSS 8.1 apparaissent dans des plugins populaires comme les addons Contact Form 7, ne pas appliquer cette protection revient à laisser une porte dérobée ouverte dans votre serveur.
Besoin d’aide pour sécuriser votre WordPress ? Découvrez nos services d’audit et de remédiation SecuriteWP — nous intervenons en urgence sur les sites compromis et accompagnons les propriétaires de sites dans la mise en place de protections durables.
✍️ À propos de l’auteur
Benjamin Bueno — Expert en cybersécurité WordPress et forensics web. Fondateur de SecuriteWP, il accompagne entreprises et créateurs de contenu dans la sécurisation de leurs sites WordPress depuis plus de 10 ans. Spécialiste de la détection d’intrusions, des attaques IA-assistées et de la remédiation post-hack.
En savoir plus →