Securiser WordPress en 2025 : le guide complet
WordPress propulse 43% du web mondial. C'est aussi la cible numero 1 des attaques automatisees. Les bots scannent en permanence a la recherche de sites vulnerables, plugins obsoletes, mots de passe faibles.
La bonne nouvelle : 95% des piratages WordPress sont evitables avec des mesures simples.
Pourquoi WordPress est cible
Avec plus de 800 millions de sites sous WordPress, les attaquants ecrivent des outils qui :
- Scannent des millions d'IPs a la recherche de
/wp-login.php - Testent des listes de 100 000 mots de passe communs
- Cherchent les versions obsoletes de plugins dans
/wp-content/plugins/ - Exploitent des CVE publiees sur les plugins populaires
- 97% des attaques WordPress sont automatisees
- 39% exploitent un plugin vulnerable
- 8% exploitent le theme
- Seulement 7% visent WordPress lui-meme
Etape 1 : Securiser l'acces wp-admin
Changer l'URL de connexion
Par defaut, n'importe qui accede a /wp-login.php. Masquez-la :
// Via le plugin "WPS Hide Login"
// Ou protection par IP dans .htaccess
<Files "wp-login.php">
Order Deny,Allow
Deny from all
Allow from 82.45.XXX.XXX # Votre IP fixe
</Files>
Authentification a deux facteurs (2FA)
Activez le 2FA sur tous les comptes admin. Plugins recommandes :
- WP 2FA : simple, supporte Authy/Google Authenticator
- Wordfence : inclut le 2FA avec son pare-feu
Supprimer le compte "admin" par defaut
# Via WP-CLI
wp user create monvrainom contact@monsite.fr --role=administrator
wp user delete admin --reassign=<new_user_id>
Etape 2 : Mises a jour - la regle des 72 heures
Quand une CVE est publiee pour un plugin, les bots commencent a l'exploiter en 24-72h.
// wp-config.php : mises a jour automatiques du core
define('WP_AUTO_UPDATE_CORE', 'minor');
// Pour les plugins et themes
add_filter('auto_update_plugin', '__return_true');
add_filter('auto_update_theme', '__return_true');
Attention : les MAJ automatiques de plugins peuvent casser votre site. Testez d'abord en staging, ou utilisez ManageWP avec snapshot pre-MAJ.
Verifier les vulnerabilites connues
# WP-Scan (open source)
gem install wpscan
wpscan --url https://votresite.fr --enumerate p,t,u \
--api-token VOTRE_TOKEN_GRATUIT
Etape 3 : Securiser wp-config.php
// Deplacer wp-config.php un niveau au-dessus du dossier public
// WordPress le trouvera automatiquement
// Cles de securite uniques (generer sur l'API WordPress)
define('AUTH_KEY', 'cle-unique-aleatoire-1');
define('SECURE_AUTH_KEY', 'cle-unique-aleatoire-2');
define('LOGGED_IN_KEY', 'cle-unique-aleatoire-3');
// ...
// Securite supplementaire
define('DISALLOW_FILE_EDIT', true); // Desactive l'editeur de fichiers
define('DISALLOW_FILE_MODS', true); // Desactive install plugins/themes
define('WP_DEBUG', false); // JAMAIS debug en production
# .htaccess : protections essentielles
<Files wp-config.php>
order allow,deny
deny from all
</Files>
<Files xmlrpc.php>
order deny,allow
deny from all
</Files>
Options -Indexes
Etape 4 : Pare-feu applicatif (WAF)
Wordfence - la reference gratuite
wp plugin install wordfence --activate
Configuration recommandee :
- Mode pare-feu : Actif
- Protection brute force : 500 tentatives/24h puis blocage 4h
- Scan automatique : quotidien
Cloudflare - WAF en amont
Mettre votre site derriere Cloudflare (gratuit) offre une protection supplementaire.
Regles Cloudflare utiles :
# Bloquer les acces suspects a wp-login.php
(http.request.uri.path eq "/wp-login.php" and
ip.geoip.country in {"CN" "RU" "KP" "NG"})
=> Block
Etape 5 : Sauvegardes - le filet de securite ultime
Strategie 3-2-1
- 3 copies de vos donnees
- 2 supports differents (local + cloud)
- 1 copie hors site
#!/bin/bash
# Script de backup automatique
DATE=$(date +%Y%m%d_%H%M)
BACKUP_DIR="/var/backups/wordpress"
# Exporter la base de donnees
wp --path=/var/www/html db export "$BACKUP_DIR/db_${DATE}.sql"
gzip "$BACKUP_DIR/db_${DATE}.sql"
# Archiver les fichiers
tar --exclude='wp-content/cache' \
-czf "$BACKUP_DIR/files_${DATE}.tar.gz" \
/var/www/html/
# Envoyer vers Backblaze B2
rclone copy "$BACKUP_DIR" b2:mon-bucket/wordpress/ \
--include "*${DATE}*"
# Garder 30 jours en local
find "$BACKUP_DIR" -mtime +30 -delete
Plugins de backup recommandes
| Plugin | Gratuit | Stockage externe |
|---|---|---|
| UpdraftPlus | Oui | S3, Dropbox, GDrive |
| BackWPup | Oui | S3, FTP |
| All-in-One WP Migration | Oui | Export manuel |
Etape 6 : Surveillance et detection
Verifier l'integrite des fichiers core
# WP-CLI verifie les checksums des fichiers WordPress
wp core verify-checksums
# Success: WordPress installation verifies against checksums.
# Si un fichier core est modifie, il sera signale ici
Notifications de connexion admin
// Notifier par email lors d'une connexion admin
add_action('wp_login', function($user_login, $user) {
if (in_array('administrator', $user->roles)) {
$message = "Connexion admin par {$user_login}\n";
$message .= "IP : " . $_SERVER['REMOTE_ADDR'] . "\n";
$message .= "Date : " . current_time('Y-m-d H:i:s');
wp_mail(get_option('admin_email'), "Connexion admin", $message);
}
}, 10, 2);
Checklist de securite WordPress complete
Acces
[x] URL wp-login.php masquee ou protegee par IP
[x] 2FA active sur tous les comptes admin
[x] Aucun compte avec le username "admin"
[x] Mot de passe 16+ caracteres aleatoires
[x] Connexions limitees (max 5 tentatives)
Mises a jour
[x] Core WordPress a jour
[x] Tous les plugins actifs a jour
[x] Tous les themes a jour
[x] Plugins/themes inutilises supprimes
Configuration
[x] wp-config.php hors webroot ou protege
[x] Cles de securite uniques
[x] WP_DEBUG = false en production
[x] DISALLOW_FILE_EDIT = true
[x] xmlrpc.php desactive
[x] Indexation des repertoires desactivee
Pare-feu
[x] Wordfence ou equivalent installe et configure
[x] Cloudflare ou WAF en amont (recommande)
Sauvegardes
[x] Sauvegardes automatiques quotidiennes
[x] Copie hors site (S3, Backblaze, Dropbox)
[x] Test de restauration effectue (1x/trimestre)
Surveillance
[x] Notifications de connexion admin
[x] Scan de malwares hebdomadaire
[x] Monitoring uptime
La securite n'est pas un etat, c'est un processus continu. Revisez votre configuration tous les trimestres, surtout apres l'ajout de nouveaux plugins ou une mise a jour majeure.
Pour aller plus loin : WordPress Security Guide