WordPress alimente plus de 40 % des sites web, mais sa popularité en fait une cible privilégiée pour les attaques. Sécuriser un site WordPress en 2025, ce n’est pas empiler des astuces isolées : c’est réduire la surface d’attaque, limiter la divulgation d’informations et rester strictement à jour sur l’ensemble de la pile (WordPress, extensions/thèmes, PHP, serveur).
La checklist de sécurité WP qui suit transforme un audit réel en plan d’action priorisé.
Sécurité du Noyau WordPress (Core)
Le noyau de WordPress est la fondation de votre site. Sa sécurité est primordiale, car toute vulnérabilité à ce niveau peut compromettre l’ensemble de votre installation. Maintenir le Core à jour et masquer les informations sensibles sont des étapes fondamentales.
Mises à jour régulières du Core
Les mises à jour du noyau WordPress ne sont pas de simples améliorations fonctionnelles ; elles incluent très souvent des correctifs de sécurité critiques. Ignorer ces mises à jour expose votre site à des vulnérabilités connues et exploitables.
WordPress propose des mises à jour automatiques pour les versions mineures, mais il est crucial de s’assurer que les mises à jour majeures sont également appliquées en temps voulu.
Version de PHP
La version de PHP sur laquelle tourne votre site WordPress a un impact direct sur ses performances et sa sécurité. Les anciennes versions de PHP, comme PHP 7.4, sont en fin de vie (End-Of-Life – EOL) et ne reçoivent plus de correctifs de sécurité. Cela signifie que toute faille découverte dans ces versions ne sera pas corrigée, laissant votre site vulnérable.
Il est impératif de migrer vers une version de PHP supportée et recommandée par WordPress, idéalement PHP 8.3 ou une version ultérieure. Cette migration doit être effectuée auprès de votre hébergeur.
Avant de procéder, assurez-vous de la compatibilité de vos thèmes et plugins avec la nouvelle version de PHP en testant sur un environnement de staging.
Masquer la version de WordPress
// Supprimer la balise meta generator de WordPress
remove_action('wp_head', 'wp_generator');
add_filter('the_generator', '__return_empty_string'); // Mesure de précaution supplémentaire Désactiver le pseudo-cron de WordPress
WordPress utilise un système de cron intégré (wp-cron.php) qui est déclenché à chaque visite de page. Bien que pratique pour les sites à faible trafic, ce pseudo-cron peut être inefficace et même poser des problèmes de performance sur les sites à fort trafic. De plus, il peut être contourné ou manipulé dans certaines attaques.
Pour une meilleure fiabilité et sécurité, il est recommandé de désactiver le pseudo-cron de WordPress et d’utiliser un cron système (via votre hébergeur ou un service de cron externe). Cela garantit que les tâches planifiées s’exécutent de manière régulière et indépendante des visites du site.
Pour désactiver le pseudo-cron, ajoutez la ligne suivante à votre fichier wp-config.php:
define('DISABLE_WP_CRON', true);Ensuite, configurez un cron système pour exécuter wp-cron.php à intervalles réguliers (par exemple, toutes les 15 minutes).
Vérification d'intégrité du Core
# Vérifier l'intégrité des fichiers du Core WordPres wp core verify-checksumsCette commande vous alertera si des fichiers ont été ajoutés, supprimés ou modifiés par rapport à la version officielle de WordPress.
Désactiver l'éditeur de fichiers intégré
WordPress inclut un éditeur de fichiers intégré qui permet de modifier les fichiers de thèmes et de plugins directement depuis le tableau de bord. Bien que pratique, cette fonctionnalité représente un risque de sécurité majeur. Si un attaquant obtient un accès administrateur à votre site, il pourrait utiliser cet éditeur pour injecter du code malveillant ou compromettre davantage votre site.
Il est fortement recommandé de désactiver cet éditeur. Pour ce faire, ajoutez la ligne suivante à votre fichier wp-config.php:
define('DISALLOW_FILE_EDIT', true);Cette mesure, souvent déjà implémentée par de nombreux administrateurs, est une bonne pratique de durcissement
Sécurité des plugins WP
Les plugins étendent les fonctionnalités de WordPress, mais ils sont aussi l’une des principales sources de vulnérabilités. Une gestion rigoureuse de vos plugins est essentielle pour maintenir la sécurité de votre site.
Mises à jour régulières des plugins
Tout comme le noyau de WordPress, les plugins reçoivent régulièrement des mises à jour qui incluent des correctifs de sécurité. Ne pas mettre à jour vos plugins expose votre site à des failles connues. Il est crucial de maintenir tous vos plugins à jour.
Nettoyage et changement d'extensions obsolètes
Un audit régulier de vos plugins est indispensable. De nombreux sites accumulent des plugins qui ne sont plus maintenus par leurs développeurs, ou qui n’ont pas été testés avec les versions récentes de WordPress. Ces plugins obsolètes ou non compatibles avec les prérequis du système WP représentent un risque de sécurité important.
Il est recommandé de remplacer les plugins peu maintenus ou non testés par des alternatives activement développées et supportées.
Vous pouvez vérifier la date de dernière mise à jour et la compatibilité d’un plugin sur sa page officielle sur WordPress.org. Si un plugin n’a pas été mis à jour depuis plus d’un an, il est temps de chercher une alternative plus sûre.
Sécurité des thèmes WP
Les thèmes, tout comme les plugins, peuvent contenir des vulnérabilités. Une gestion rigoureuse de vos thèmes est donc tout aussi importante.
Mises à jour régulières des thèmes
Les développeurs de thèmes publient régulièrement des mises à jour pour corriger les failles de sécurité et améliorer la compatibilité. Il est essentiel de maintenir votre thème actif, ainsi que tous les thèmes inactifs, à jour.
Les thèmes inactifs, s’ils ne sont pas mis à jour, peuvent toujours être exploités par des attaquants.
Il est également recommandé de supprimer tous les thèmes inutilisés pour réduire davantage votre surface d’attaque.
Nettoyage et changement d'extensions obsolètes
Les thèmes, tout comme les plugins, peuvent contenir des vulnérabilités. Une gestion rigoureuse de vos thèmes est donc tout aussi importante.
Sécurité de la base de données
La base de données est le cœur de votre site WordPress, stockant tout, des articles aux commentaires en passant par les informations d’utilisateur. Sa protection est donc d’une importance capitale.
Principe du moindre privilège pour MySQL
L’utilisateur MySQL que WordPress utilise pour se connecter à la base de données ne devrait avoir que les privilèges strictement nécessaires à son fonctionnement. Accorder des privilèges excessifs est une erreur de sécurité courante.
L’utilisateur MySQL devrait être autorisé à se connecter uniquement depuis localhost (si la base de données est sur le même serveur que WordPress) et ses privilèges devraient être limités à la lecture, l’écriture, et la création/altération de tables pour les mises à jour.
Cela réduit considérablement le risque en cas de compromission de l’utilisateur de la base de données, limitant les actions qu’un attaquant pourrait effectuer.
Sauvegardes et tests de restauration
Les sauvegardes sont votre dernière ligne de défense contre la perte de données due à une attaque, une erreur humaine ou une défaillance matérielle. Il est impératif de mettre en place une stratégie de sauvegarde robuste qui inclut à la fois les fichiers de votre site et votre base de données.
Adoptez la règle du 3-2-1 : 3 copies de vos données, sur 2 types de supports différents, avec 1 copie hors site.
Les sauvegardes doivent être planifiées et externalisées (vers un service cloud comme S3, ou un autre serveur).
Plus important encore, vous devez régulièrement tester la restauration de ces sauvegardes pour vous assurer qu’elles sont complètes et fonctionnelles.
Votre site WordPress est piraté ? Agissez vite !
Ne laissez pas un piratage compromettre votre site. Contactez notre équipe d’experts en sécurité WordPress dès maintenant pour un diagnostic complet, une restauration sécurisée et un plan de protection sur mesure.
Sécurité des fichiers et répertoires
La configuration des permissions des fichiers et répertoires, ainsi que la gestion des fichiers sensibles, sont des aspects cruciaux de la sécurité de votre site WordPress.
Permissions de wp-config.php
Le fichier wp-config.php est l’un des fichiers les plus importants de votre installation WordPress, car il contient les informations de connexion à votre base de données et d’autres paramètres sensibles. Ses permissions doivent être très restrictives pour empêcher tout accès non autorisé.
WordPress recommande des permissions de 400 ou 440 pour ce fichier, ce qui signifie que seul le propriétaire peut le lire, et éventuellement le groupe. Des permissions de 600 sont acceptables dans certains environnements dédiés, mais 400 ou 440 sont plus sécurisées.
Renouveler les clés et salts
WordPress utilise des clés de sécurité et des salts (phrases secrètes) dans wp-config.php pour sécuriser les cookies de connexion et les informations d’authentification. Ces clés devraient être uniques et complexes.
Il est recommandé de les renouveler périodiquement, surtout si vous suspectez une compromission ou si elles sont âgées de plus de 90 jours. Le renouvellement force tous les utilisateurs à se reconnecter, invalidant ainsi les sessions potentiellement compromises.
Vous pouvez générer de nouvelles clés et salts en utilisant l’API de WordPress ou des générateurs en ligne, puis les remplacer dans votre fichier wp-config.php.
Nettoyer les fichiers racine
Certains fichiers installés par défaut à la racine de votre installation WordPress peuvent divulguer des informations inutiles ou potentiellement exploitables. C’est le cas de readme.html, license.txt, et wp-config-sample.php. Ces fichiers peuvent révéler la version de WordPress ou d’autres détails de configuration qui pourraient aider un attaquant. De même, tout fichier de dump de base de données ou de sauvegarde laissé à la racine est une cible de choix.
Il est recommandé de supprimer ou de bloquer l’accès à ces fichiers non indispensables. Pour les bloquer via .htaccess, vous pouvez ajouter des règles spécifiques
Désactiver l'exécution PHP dans /uploads
<FilesMatch "\\.ph(?:p[0-9]?|ar)$"> Deny from all </FilesMatch>
Désactiver l'indexation de répertoires
L’indexation de répertoires permet aux visiteurs de naviguer dans le contenu de vos répertoires si aucun fichier index.php ou index.html n’est présent. Cela peut exposer la structure de vos dossiers et divulguer des informations sensibles sur votre site.
Pour corriger le problème de Directory Listing, il est recommandé de désactiver l’indexation de répertoires. Vous pouvez le faire en ajoutant la ligne suivante à votre fichier .htaccess à la racine de votre site.
Options -Indexes
Sécurité du serveur et headers HTTP
La configuration de votre serveur web et l’utilisation des headers HTTP de sécurité sont des éléments fondamentaux pour protéger votre site WordPress contre diverses attaques web.
Supprimer l'en-tête X-Powered-By: PHP
Par défaut, la plupart des configurations PHP incluent un en-tête X-Powered-By dans les réponses HTTP, qui révèle la version de PHP utilisée par votre serveur.
Comme pour la version de WordPress, cette information peut être utilisée par des attaquants pour cibler des vulnérabilités spécifiques à une version de PHP. Il est recommandé de masquer cette information.
La méthode officielle pour supprimer cet en-tête est de désactiver l’option expose_php dans votre fichier php.ini.
expose_php = Off
Après cette modification, vous devrez redémarrer votre serveur web pour que les changements prennent effet.
Headers HTTP de sécurité
Les headers HTTP de sécurité sont des directives envoyées par votre serveur web au navigateur du client, lui indiquant comment gérer le contenu de votre site.
Leur activation est cruciale pour se protéger contre des attaques courantes comme le Cross-Site Scripting (XSS), le clickjacking, et le sniffing MIME.
Voici les headers essentiels à configurer:
- X-Content-Type-Options: nosniff: Empêche le navigateur de deviner le type MIME des fichiers, ce qui peut prévenir certaines attaques de type XSS.
- X-Frame-Options: SAMEORIGIN: Protège contre le clickjacking en empêchant votre site d’être intégré dans une <iframe> sur un autre domaine. Pour une protection plus robuste, il est préférable d’utiliser la directive frame-ancestors dans une Content Security Policy (CSP).
- Strict-Transport-Security (HSTS): Force le navigateur à n’utiliser que des connexions HTTPS pour votre site pendant une période donnée. Cela prévient les attaques de type man-in-the-middle et garantit que toutes les communications sont chiffrées. Attention: Activez HSTS uniquement si votre site est entièrement en HTTPS et que vous contrôlez tous les sous-domaines, car il est difficile de revenir en arrière une fois activé.
- Referrer-Policy: strict-origin-when-cross-origin: Contrôle la quantité d’informations de référence (URL de la page précédente) envoyées lorsque l’utilisateur navigue depuis votre site. Cette politique est un bon équilibre entre la confidentialité et la fonctionnalité.
- Permissions-Policy: Permet de contrôler l’accès aux fonctionnalités du navigateur (comme la géolocalisation, le microphone, la caméra, etc.) pour votre site et les ressources tierces. Il est recommandé de désactiver les fonctionnalités non utilisées pour réduire la surface d’attaque.
- Content-Security-Policy (CSP): La CSP est l’une des mesures de sécurité les plus efficaces contre les attaques XSS. Elle permet de définir les sources de contenu (scripts, styles, images, etc.) que le navigateur est autorisé à charger. Une CSP doit être construite itérativement et testée rigoureusement, idéalement en mode report-only au début, avant d’être appliquée en mode enforcement.
# Empêche le sniffing MIME Header set X-Content-Type-Options "nosniff" # (Option legacy) Défense clickjacking (ou préférez CSP frame-ancestors) Header set X-Frame-Options "SAMEORIGIN" # HSTS (testez avant d'ajouter includeSubDomains; preload nécessite inscription) Header set Strict-Transport-Security "max-age=31536000; includeSubDomains" # Référent moins bavard Header set Referrer-Policy "strict-origin-when-cross-origin" # Permissions-Policy (exemple minimal) Header set Permissions-Policy "geolocation=(), microphone=()" # CSP très basique (à durcir selon votre site) Header set Content-Security-Policy "default-src 'self'; img-src 'self' data: https:; script-src 'self' 'unsafe-inline' https:; style-src 'self' 'unsafe-inline' https:"
Sécurité des API et communications
REST API : Limiter l'exposition et supprimer les liens de découverte
// Supprimer les liens de découverte de l'API REST
remove_action('wp_head', 'rest_output_link_wp_head', 10);
remove_action('template_redirect', 'rest_output_link_header', 11);
De plus, si votre site n’a pas besoin d’un accès REST anonyme, vous pouvez restreindre l’API REST aux utilisateurs authentifiés. Cela peut être fait via un plugin de sécurité ou en utilisant des filtres pour exiger une authentification pour toutes les requêtes API. XML-RPC et lien EditURI (RSD)
// Retirer le lien RSD
remove_action('wp_head', 'rsd_link');
Pour désactiver l’authentification XML-RPC (ce qui coupe les méthodes nécessitant une authentification, comme la publication), vous pouvez utiliser le filtre suivant:
// Désactiver l'authentification XML-RPC
add_filter('xmlrpc_enabled', '__return_false'); Autres mesures de sécurité essentielles
Masquer les Informations du serveur
Par défaut, certains serveurs web (notamment Apache) peuvent inclure une signature du serveur dans les pages d’erreur générées, révélant des informations sur le type de serveur et sa version (par exemple, Apache/2.4.41 (Ubuntu) Server at example.com Port 80).
Cette information, bien que non critique en soi, peut être utilisée par des attaquants pour identifier des vulnérabilités spécifiques à une version de serveur. Il est donc recommandé de masquer cette signature pour réduire la quantité d’informations divulguées.
Pour désactiver ServerSignature dans Apache, vous pouvez ajouter la directive suivante à votre fichier de configuration Apache (par exemple, httpd.conf ou dans un fichier de configuration de VirtualHost) ou dans votre fichier .htaccess (si autorisé par la configuration du serveur) :
ServerSignature Off
Mots de passe forts
Ceci peut sembler évident, mais l’utilisation de mots de passe forts et uniques pour tous les comptes utilisateurs (administrateurs, éditeurs, auteurs, etc.) est la première ligne de défense. Un mot de passe fort doit être long (au moins 12 caractères), contenir un mélange de lettres majuscules et minuscules, de chiffres et de symboles.
Évitez les informations personnelles faciles à deviner et n’utilisez jamais le même mot de passe sur plusieurs sites.
Encouragez l’utilisation de gestionnaires de mots de passe pour générer et stocker des mots de passe complexes en toute sécurité.
Anti-Brute Force et limitation de connexion
Les attaques par force brute, où un attaquant tente de deviner votre mot de passe en essayant de multiples combinaisons, sont très courantes. Pour vous protéger contre ces attaques, il est essentiel de limiter le nombre de tentatives de connexion infructueuses et d’ajouter un CAPTCHA à votre formulaire de connexion.
Des plugins comme « Limit Login Attempts Reloaded » sont très efficaces pour cela. Ils bloquent temporairement l’adresse IP d’un utilisateur après un certain nombre de tentatives de connexion échouées, rendant les attaques par force brute beaucoup plus difficiles.
WAF applicatif
Un pare-feu applicatif web (WAF) côté WordPress ajoute une couche de protection supplémentaire en surveillant le trafic de votre site et en bloquant les requêtes malveillantes.
Des plugins comme Wordfence ou Sucuri Security offrent des fonctionnalités de WAF, de surveillance de l’intégrité des fichiers, de scan de logiciels malveillants et de blocage d’adresses IP malveillantes.
Journalisation et Surveillance
Savoir ce qui se passe sur votre site est essentiel pour détecter et répondre rapidement aux incidents de sécurité. La journalisation des activités et la surveillance continue vous permettent de suivre les changements, les tentatives de connexion, les modifications de fichiers, et d’autres événements critiques.
Des plugins comme « WP Activity Log » peuvent enregistrer toutes les actions importantes effectuées sur votre site, fournissant un audit trail détaillé.
En complément, la vérification périodique de l’intégrité des fichiers du Core (wp core verify-checksums) vous alertera de toute modification non autorisée.
