Retour au blog
Securiser WordPress Apres un Piratage : 12 Mesures Essentielles
SEO

Securiser WordPress Apres un Piratage : 12 Mesures Essentielles

Bastien Allain11 mars 202615 min de lecture
wordpresssecuritepiratagehardeningwaf2fa

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

CompteOu le changerPriorite
Comptes WordPress adminWP-CLI ou tableau de bordCritique
Base de donnees MySQLphpMyAdmin ou ligne de commandeCritique
FTP / SFTPPanel hebergeurCritique
SSHCle SSH ou panel hebergeurCritique
Panel hebergeur (cPanel, Plesk)Interface hebergeurHaute
Comptes email associesFournisseur emailHaute
CDN et services tiersTableau de bord du serviceMoyenne

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"
done

Changer 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/html

Utilisez 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/html

Cette commande remplace les 8 constantes de securite dans wp-config.php :

  • AUTH_KEY
  • SECURE_AUTH_KEY
  • LOGGED_IN_KEY
  • NONCE_KEY
  • AUTH_SALT
  • SECURE_AUTH_SALT
  • LOGGED_IN_SALT
  • NONCE_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

SolutionTypeAvantages
CloudflareCloud (reverse proxy)Protection DDoS incluse, CDN, gratuit
Sucuri FirewallCloudSpecialise WordPress, nettoyage inclus
WordfencePlugin applicatifInspection profonde, gratuit
ModSecurityServeur (module Apache/Nginx)Performance, regles OWASP

Configuration Cloudflare (Recommande)

  1. Creez un compte Cloudflare et ajoutez votre domaine
  2. Modifiez les nameservers chez votre registrar
  3. 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 apache2

4. 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/html

Configuration Recommandee

  1. Activez le TOTP (Time-based One-Time Password) comme methode principale
  2. Configurez des codes de secours en cas de perte du telephone
  3. 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

ElementPermissionCommande
Repertoires755find . -type d -exec chmod 755 {} \;
Fichiers644find . -type f -exec chmod 644 {} \;
wp-config.php400 ou 440chmod 400 wp-config.php
.htaccess444chmod 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/html

Cette 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/html

Avec 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.php

WordPress 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/html

8. 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/html

Configuration Recommandee

ParametreValeur recommandee
Tentatives autorisees3
Duree du verrouillage20 minutes
Verrouillages avant blocage prolonge3
Duree du blocage prolonge24 heures
Notification par emailApres 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/html

La 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

HeaderFonctionValeur
Content-Security-PolicyPrevient les injections XSSDefinit les sources autorisees
X-Content-Type-OptionsBloque le MIME sniffingnosniff
X-Frame-OptionsPrevient le clickjackingSAMEORIGIN
Strict-Transport-SecurityForce HTTPSmax-age=31536000
Referrer-PolicyControle les informations de referrerstrict-origin-when-cross-origin
Permissions-PolicyRestreint les API navigateurSelon 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.com

12. 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

ServiceFonctionnalitesTarif
Sucuri SiteCheckScan malware, blacklist, anomaliesGratuit (scan basique)
UptimeRobotDisponibilite, alertes temps reelGratuit (50 moniteurs)
Wordfence CentralDashboard multi-sites, scansGratuit (fonctions de base)
WPScanVulnerabilites plugins/themesGratuit (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

MesurePrioriteDifficulteImpact
1. Changer tous les mots de passeCritiqueFaibleTres eleve
2. Regenerer les cles de securiteCritiqueFaibleEleve
3. Installer un WAFHauteMoyenneTres eleve
4. Activer le 2FAHauteFaibleTres eleve
5. Configurer les permissionsHauteFaibleEleve
6. Desactiver l'editeur de fichiersHauteFaibleMoyen
7. Proteger wp-config.phpHauteFaibleEleve
8. Securiser .htaccessMoyenneMoyenneEleve
9. Desactiver XML-RPCMoyenneFaibleMoyen
10. Limiter les tentatives de connexionHauteFaibleEleve
11. Configurer les headers HTTPMoyenneMoyenneEleve
12. Mettre en place le monitoringHauteMoyenneTres 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.

Articles similaires