
Securiser WordPress Apres un Piratage : 12 Mesures Essentielles
Un piratage WordPress n'est jamais anodin. Meme apres un nettoyage reussi, votre site reste vulnerable si vous ne renforcez pas drastiquement sa securite. Les statistiques sont parlantes : 73 % des sites WordPress nettoyes sont re-infectes dans les 30 jours faute de mesures de durcissement adequates. Si vous n'avez pas encore nettoye votre site, suivez d'abord notre guide de nettoyage en 10 etapes. Ce guide vous presente 12 mesures essentielles pour securiser WordPress apres un piratage, en couvrant chaque couche de protection, du serveur jusqu'a l'interface d'administration. Chaque mesure inclut les commandes et configurations concretes a mettre en place.
1. Changer Tous les Mots de Passe
La premiere mesure apres un piratage est de considerer que tous les identifiants sont compromis. Changez systematiquement chaque mot de passe lie a votre environnement WordPress.
Mots de Passe a Changer
| Compte | Ou le changer | Priorite |
|---|---|---|
| Comptes WordPress admin | WP-CLI ou tableau de bord | Critique |
| Base de donnees MySQL | phpMyAdmin ou ligne de commande | Critique |
| FTP / SFTP | Panel hebergeur | Critique |
| SSH | Cle SSH ou panel hebergeur | Critique |
| Panel hebergeur (cPanel, Plesk) | Interface hebergeur | Haute |
| Comptes email associes | Fournisseur email | Haute |
| CDN et services tiers | Tableau de bord du service | Moyenne |
Commandes WP-CLI
# Changer le mot de passe de tous les administrateurs
wp user list --role=administrator --field=ID --path=/var/www/html | while read id; do
NEW_PASS=$(openssl rand -base64 24)
wp user update $id --user_pass="$NEW_PASS" --path=/var/www/html
echo "Utilisateur $id : mot de passe mis a jour"
doneChanger les Identifiants de la Base de Donnees
# 1. Changer le mot de passe MySQL
mysql -u root -p -e "ALTER USER 'wp_user'@'localhost' IDENTIFIED BY 'NouveauMotDePasse_Complexe_2026!';"
# 2. Mettre a jour wp-config.php avec le nouveau mot de passe
wp config set DB_PASSWORD 'NouveauMotDePasse_Complexe_2026!' --path=/var/www/htmlUtilisez des mots de passe d'au moins 20 caracteres avec un melange de majuscules, minuscules, chiffres et caracteres speciaux.
2. Regenerer les Cles de Securite WordPress
Les cles de securite (salts) de WordPress sont utilisees pour chiffrer les cookies et les sessions. Si un attaquant les connait, il peut forger des sessions valides meme apres le changement des mots de passe.
# Regenerer automatiquement toutes les cles
wp config shuffle-salts --path=/var/www/htmlCette commande remplace les 8 constantes de securite dans wp-config.php :
AUTH_KEYSECURE_AUTH_KEYLOGGED_IN_KEYNONCE_KEYAUTH_SALTSECURE_AUTH_SALTLOGGED_IN_SALTNONCE_SALT
La regeneration des cles deconnecte immediatement toutes les sessions actives, y compris celles potentiellement utilisees par l'attaquant.
3. Installer un Pare-feu WAF (Web Application Firewall)
Un WAF filtre le trafic HTTP avant qu'il n'atteigne WordPress, bloquant les requetes malveillantes en amont.
Options de WAF
| Solution | Type | Avantages |
|---|---|---|
| Cloudflare | Cloud (reverse proxy) | Protection DDoS incluse, CDN, gratuit |
| Sucuri Firewall | Cloud | Specialise WordPress, nettoyage inclus |
| Wordfence | Plugin applicatif | Inspection profonde, gratuit |
| ModSecurity | Serveur (module Apache/Nginx) | Performance, regles OWASP |
Configuration Cloudflare (Recommande)
- Creez un compte Cloudflare et ajoutez votre domaine
- Modifiez les nameservers chez votre registrar
- Activez les regles de securite WordPress :
Tableau de bord Cloudflare > Securite > WAF > Regles gerees
- Activer "Cloudflare WordPress Ruleset"
- Activer "Cloudflare OWASP Core Ruleset"
Configuration ModSecurity (Serveur)
# Installer ModSecurity sur Apache
sudo apt install libapache2-mod-security2
sudo a2enmod security2
# Telecharger les regles OWASP CRS
cd /etc/modsecurity/
sudo git clone https://github.com/coreruleset/coreruleset.git
sudo cp coreruleset/crs-setup.conf.example coreruleset/crs-setup.conf
# Activer les regles dans la configuration Apache
sudo cat >> /etc/apache2/mods-enabled/security2.conf << 'EOF'
IncludeOptional /etc/modsecurity/coreruleset/crs-setup.conf
IncludeOptional /etc/modsecurity/coreruleset/rules/*.conf
EOF
sudo systemctl restart apache24. Activer l'Authentification a Deux Facteurs (2FA)
Le 2FA ajoute une couche de securite supplementaire en exigeant un code temporaire en plus du mot de passe. Meme si un attaquant obtient les identifiants, il ne pourra pas se connecter sans le second facteur.
Implementation avec WP-CLI et Plugin
# Installer le plugin Two-Factor
wp plugin install two-factor --activate --path=/var/www/htmlConfiguration Recommandee
- Activez le TOTP (Time-based One-Time Password) comme methode principale
- Configurez des codes de secours en cas de perte du telephone
- Forcez le 2FA pour tous les administrateurs et editeurs
Configuration Programmatique (functions.php ou mu-plugin)
<?php
// Forcer le 2FA pour les administrateurs
add_filter('two_factor_providers', function($providers) {
// Garder uniquement TOTP et codes de secours
return array(
'Two_Factor_Totp' => $providers['Two_Factor_Totp'],
'Two_Factor_Backup_Codes' => $providers['Two_Factor_Backup_Codes'],
);
});Pour une securite optimale, privilegiez une application d'authentification (Google Authenticator, Authy, 1Password) plutot que les SMS, vulnerables au SIM swapping.
5. Configurer les Permissions de Fichiers
Des permissions de fichiers incorrectes sont l'une des vulnerabilites les plus courantes et facilitent l'injection de fichiers infectes sur votre serveur. Voici les permissions recommandees pour WordPress :
Permissions Recommandees
| Element | Permission | Commande |
|---|---|---|
| Repertoires | 755 | find . -type d -exec chmod 755 {} \; |
| Fichiers | 644 | find . -type f -exec chmod 644 {} \; |
| wp-config.php | 400 ou 440 | chmod 400 wp-config.php |
| .htaccess | 444 | chmod 444 .htaccess |
Appliquer les Permissions Correctes
cd /var/www/html
# Permissions des repertoires
find . -type d -exec chmod 755 {} \;
# Permissions des fichiers
find . -type f -exec chmod 644 {} \;
# Permissions restrictives pour wp-config.php
chmod 400 wp-config.php
# Permissions restrictives pour .htaccess
chmod 444 .htaccess
# Proprietaire correct (remplacer www-data par votre utilisateur web)
chown -R www-data:www-data /var/www/html/Empecher la Creation de Fichiers PHP dans uploads
Ajoutez un fichier .htaccess dans le repertoire wp-content/uploads/ :
# wp-content/uploads/.htaccess
<FilesMatch "\.(?:php|phtml|php5|php7|phps)$">
Order Allow,Deny
Deny from all
</FilesMatch>Pour Nginx :
location ~* /wp-content/uploads/.*\.php$ {
deny all;
}6. Desactiver l'Editeur de Fichiers Integre
L'editeur de fichiers integre de WordPress permet de modifier les fichiers PHP des themes et plugins directement depuis le tableau de bord. C'est une porte d'entree majeure pour les attaquants qui obtiennent un acces administrateur.
# Ajouter dans wp-config.php
wp config set DISALLOW_FILE_EDIT true --raw --path=/var/www/htmlCette constante desactive completement l'editeur de themes et de plugins dans le tableau de bord. Pour une securite encore plus stricte, desactivez aussi l'installation de plugins et themes depuis le tableau de bord :
# Empecher l'installation/mise a jour de plugins et themes depuis le dashboard
wp config set DISALLOW_FILE_MODS true --raw --path=/var/www/htmlAvec DISALLOW_FILE_MODS, les mises a jour devront etre effectuees exclusivement via WP-CLI ou SFTP.
7. Proteger wp-config.php
Le fichier wp-config.php contient les informations les plus sensibles de votre site : identifiants de base de donnees, cles de securite et configuration du site.
Protection via .htaccess (Apache)
# Empecher l'acces direct a wp-config.php
<Files wp-config.php>
Order Allow,Deny
Deny from all
</Files>Protection via Nginx
location ~ /wp-config\.php$ {
deny all;
}Deplacer wp-config.php
WordPress permet de placer wp-config.php un niveau au-dessus de la racine web :
# Deplacer wp-config.php au-dessus de la racine web
mv /var/www/html/wp-config.php /var/www/wp-config.phpWordPress detecte automatiquement le fichier un niveau au-dessus. Cette technique ajoute une couche de protection en placant le fichier hors du repertoire accessible publiquement.
Ajouter des Constantes de Securite
# Forcer HTTPS
wp config set FORCE_SSL_ADMIN true --raw --path=/var/www/html
# Desactiver le debug en production
wp config set WP_DEBUG false --raw --path=/var/www/html
wp config set WP_DEBUG_DISPLAY false --raw --path=/var/www/html
wp config set WP_DEBUG_LOG false --raw --path=/var/www/html8. Securiser le Fichier .htaccess
Le fichier .htaccess controle le comportement du serveur Apache. Un .htaccess correctement configure renforce considerablement la securite.
Configuration de Securite Recommandee
# Proteger .htaccess lui-meme
<Files .htaccess>
Order Allow,Deny
Deny from all
</Files>
# Empecher le listing des repertoires
Options -Indexes
# Bloquer l'acces aux fichiers sensibles
<FilesMatch "(^\.ht|wp-config\.php|readme\.html|license\.txt|xmlrpc\.php)">
Order Allow,Deny
Deny from all
</FilesMatch>
# Bloquer l'execution PHP dans wp-includes
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>
# Empecher l'acces aux fichiers includes
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !^(.*)wp-includes/ms-files.php
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
</IfModule>
# Bloquer les requetes suspectes
<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]
</IfModule>9. Desactiver XML-RPC
XML-RPC est un ancien protocole de communication avec WordPress. Il est rarement utilise mais represente un vecteur d'attaque majeur pour les attaques par brute force et les attaques DDoS amplifiees.
Desactiver via .htaccess
# Bloquer completement l'acces a xmlrpc.php
<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>Desactiver via un Filtre WordPress
<?php
// Ajouter dans functions.php ou un mu-plugin
add_filter('xmlrpc_enabled', '__return_false');
// Supprimer le header X-Pingback
add_filter('wp_headers', function($headers) {
unset($headers['X-Pingback']);
return $headers;
});
// Desactiver les methodes XML-RPC
add_filter('xmlrpc_methods', function($methods) {
return array();
});Desactiver via Nginx
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}Si vous utilisez l'application mobile WordPress ou Jetpack, vous devrez garder XML-RPC actif. Dans ce cas, limitez l'acces a certaines adresses IP uniquement.
10. Limiter les Tentatives de Connexion
Les attaques par brute force ciblent la page de connexion WordPress (wp-login.php). Limiter les tentatives de connexion bloque ces attaques.
Installation du Plugin Limit Login Attempts
# Installer et activer le plugin
wp plugin install limit-login-attempts-reloaded --activate --path=/var/www/htmlConfiguration Recommandee
| Parametre | Valeur recommandee |
|---|---|
| Tentatives autorisees | 3 |
| Duree du verrouillage | 20 minutes |
| Verrouillages avant blocage prolonge | 3 |
| Duree du blocage prolonge | 24 heures |
| Notification par email | Apres 2 verrouillages |
Protection Supplementaire via .htaccess
# Limiter l'acces a wp-login.php par adresse IP
<Files wp-login.php>
Order Deny,Allow
Deny from all
# Autoriser votre IP (remplacer par votre IP)
Allow from 203.0.113.42
Allow from 198.51.100.0/24
</Files>Changer l'URL de Connexion
Modifier l'URL de la page de connexion reduit significativement les attaques automatisees :
# Installer WPS Hide Login
wp plugin install wps-hide-login --activate --path=/var/www/html
# Configurer la nouvelle URL de connexion
wp option update whl_page 'mon-acces-securise' --path=/var/www/htmlLa page de connexion sera alors accessible a votre-site.com/mon-acces-securise au lieu de votre-site.com/wp-login.php.
11. Configurer les Headers HTTP de Securite
Les headers HTTP de securite protegent contre les attaques XSS, le clickjacking, le MIME sniffing et d'autres menaces cote navigateur.
Headers Recommandes
| Header | Fonction | Valeur |
|---|---|---|
| Content-Security-Policy | Previent les injections XSS | Definit les sources autorisees |
| X-Content-Type-Options | Bloque le MIME sniffing | nosniff |
| X-Frame-Options | Previent le clickjacking | SAMEORIGIN |
| Strict-Transport-Security | Force HTTPS | max-age=31536000 |
| Referrer-Policy | Controle les informations de referrer | strict-origin-when-cross-origin |
| Permissions-Policy | Restreint les API navigateur | Selon besoins |
Configuration Apache (.htaccess)
<IfModule mod_headers.c>
# Forcer HTTPS pendant 1 an
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# Prevenir le clickjacking
Header always set X-Frame-Options "SAMEORIGIN"
# Prevenir le MIME sniffing
Header always set X-Content-Type-Options "nosniff"
# Politique de referrer
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# Politique de permissions
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()"
# Content Security Policy (adapter selon votre site)
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://www.google-analytics.com https://www.googletagmanager.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https:; connect-src 'self' https://www.google-analytics.com;"
</IfModule>Configuration Nginx
# Headers de securite
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=()" always;Verifier vos Headers
Apres configuration, testez vos headers avec :
# Verifier les headers HTTP
curl -I https://votre-site.com
# Ou utiliser un service en ligne comme securityheaders.com12. Mettre en Place un Systeme de Monitoring
La derniere mesure, mais sans doute la plus importante a long terme, est de surveiller en continu votre site pour detecter toute anomalie avant qu'elle ne devienne un piratage.
Monitoring de l'Integrite des Fichiers
# Creer un script de monitoring complet
cat > /usr/local/bin/wp-security-monitor.sh << 'SCRIPT'
#!/bin/bash
SITE_PATH="/var/www/html"
LOG="/var/log/wp-security.log"
ALERT_EMAIL="admin@votre-site.com"
echo "=== Scan de securite - $(date) ===" >> $LOG
# 1. Verifier l'integrite des fichiers core
echo "[Core Checksums]" >> $LOG
wp core verify-checksums --path=$SITE_PATH >> $LOG 2>&1
# 2. Verifier l'integrite des plugins
echo "[Plugin Checksums]" >> $LOG
wp plugin verify-checksums --all --path=$SITE_PATH >> $LOG 2>&1
# 3. Fichiers PHP dans uploads
echo "[PHP in Uploads]" >> $LOG
PHP_IN_UPLOADS=$(find $SITE_PATH/wp-content/uploads/ -name "*.php" -type f 2>/dev/null)
if [ -n "$PHP_IN_UPLOADS" ]; then
echo "ALERTE: Fichiers PHP trouves dans uploads:" >> $LOG
echo "$PHP_IN_UPLOADS" >> $LOG
echo "$PHP_IN_UPLOADS" | mail -s "ALERTE SECURITE: PHP dans uploads" $ALERT_EMAIL
fi
# 4. Fichiers modifies dans les 24 dernieres heures
echo "[Fichiers modifies recemment]" >> $LOG
find $SITE_PATH -name "*.php" -mtime -1 -type f >> $LOG 2>&1
# 5. Nouveaux comptes administrateurs
echo "[Comptes admin]" >> $LOG
wp user list --role=administrator --path=$SITE_PATH --format=table >> $LOG 2>&1
echo "=== Fin du scan ===" >> $LOG
SCRIPT
chmod +x /usr/local/bin/wp-security-monitor.sh
# Planifier un scan quotidien
(crontab -l 2>/dev/null; echo "0 4 * * * /usr/local/bin/wp-security-monitor.sh") | crontab -Services de Monitoring Externes
| Service | Fonctionnalites | Tarif |
|---|---|---|
| Sucuri SiteCheck | Scan malware, blacklist, anomalies | Gratuit (scan basique) |
| UptimeRobot | Disponibilite, alertes temps reel | Gratuit (50 moniteurs) |
| Wordfence Central | Dashboard multi-sites, scans | Gratuit (fonctions de base) |
| WPScan | Vulnerabilites plugins/themes | Gratuit (usage API limite) |
Alertes Google Search Console
Configurez les alertes dans Google Search Console pour etre notifie immediatement si Google detecte :
- Des problemes de securite sur votre site
- Du contenu pirate dans l'index
- Des actions manuelles liees a du spam
Recapitulatif des 12 Mesures
| Mesure | Priorite | Difficulte | Impact |
|---|---|---|---|
| 1. Changer tous les mots de passe | Critique | Faible | Tres eleve |
| 2. Regenerer les cles de securite | Critique | Faible | Eleve |
| 3. Installer un WAF | Haute | Moyenne | Tres eleve |
| 4. Activer le 2FA | Haute | Faible | Tres eleve |
| 5. Configurer les permissions | Haute | Faible | Eleve |
| 6. Desactiver l'editeur de fichiers | Haute | Faible | Moyen |
| 7. Proteger wp-config.php | Haute | Faible | Eleve |
| 8. Securiser .htaccess | Moyenne | Moyenne | Eleve |
| 9. Desactiver XML-RPC | Moyenne | Faible | Moyen |
| 10. Limiter les tentatives de connexion | Haute | Faible | Eleve |
| 11. Configurer les headers HTTP | Moyenne | Moyenne | Eleve |
| 12. Mettre en place le monitoring | Haute | Moyenne | Tres eleve |
Automatiser le Hardening avec un Script
Pour appliquer les mesures les plus courantes en une seule commande :
#!/bin/bash
# Script de hardening WordPress post-piratage
SITE_PATH="/var/www/html"
echo "=== Hardening WordPress ==="
# Regenerer les cles de securite
wp config shuffle-salts --path=$SITE_PATH
echo "[OK] Cles de securite regenerees"
# Desactiver l'editeur de fichiers
wp config set DISALLOW_FILE_EDIT true --raw --path=$SITE_PATH
echo "[OK] Editeur de fichiers desactive"
# Forcer HTTPS
wp config set FORCE_SSL_ADMIN true --raw --path=$SITE_PATH
echo "[OK] HTTPS force pour l'admin"
# Desactiver le debug
wp config set WP_DEBUG false --raw --path=$SITE_PATH
echo "[OK] Mode debug desactive"
# Permissions des fichiers
find $SITE_PATH -type d -exec chmod 755 {} \;
find $SITE_PATH -type f -exec chmod 644 {} \;
chmod 400 $SITE_PATH/wp-config.php
chmod 444 $SITE_PATH/.htaccess
echo "[OK] Permissions des fichiers corrigees"
# Installer et activer les plugins de securite
wp plugin install two-factor --activate --path=$SITE_PATH
wp plugin install limit-login-attempts-reloaded --activate --path=$SITE_PATH
echo "[OK] Plugins de securite installes"
# Mettre a jour tout
wp core update --path=$SITE_PATH
wp plugin update --all --path=$SITE_PATH
wp theme update --all --path=$SITE_PATH
echo "[OK] WordPress et extensions mis a jour"
echo "=== Hardening termine ==="Ne Pas Rester Sans Protection
La securite WordPress est un processus continu, pas une action ponctuelle. Les 12 mesures presentees dans ce guide constituent le socle minimum de securite apres un piratage. Pour une protection optimale, combinez ces mesures avec des audits de securite reguliers et une veille active sur les vulnerabilites de votre ecosysteme WordPress. Restez informe des menaces critiques comme la vulnerabilite RCE zero-day WordPress de 2026, et consultez notre guide de suppression de malware WordPress si votre site presente encore des traces d'infection.
Pour un accompagnement professionnel, decouvrez notre service de suppression de malware WordPress et nos solutions de securite WordPress. Consultez egalement notre guide complet de nettoyage apres piratage, notre catalogue des malwares WordPress les plus courants en 2026 et notre guide de maintenance WordPress pour prevenir toute rechute.

