Lecture : 12 minutes · Niveau : intermédiaire · Mise à jour : avril 2026
Une boutique WooCommerce compromise n’est pas un incident de site web — c’est un incident financier immédiat. Cet article fournit une checklist actionnable de 30 points, organisée du plus critique au plus avancé, avec le code et les configurations testées pour chaque étape.
Sommaire
- Le périmètre à protéger sur une boutique WooCommerce
- 🔴 Critique : 10 points à régler en 24 heures
- 🟠 Important : 10 points à régler dans la semaine
- 🟢 Avancé : 10 points pour un hardening complet
- Audit automatisé : commandes prêtes à l’emploi
- FAQ
1. Le périmètre à protéger sur une boutique WooCommerce
Une boutique WooCommerce empile 5 couches dont chacune est attaquable :
| Couche | Surface d’attaque | Outils principaux |
|---|---|---|
| Serveur | SSH, ports ouverts, mises à jour OS | UFW, fail2ban, unattended-upgrades |
| Web | NGINX/Apache, PHP, certificats TLS | Cloudflare, certbot |
| WordPress | Core, thèmes, plugins, wp-admin | Wordfence, Solid Security, WPScan |
| WooCommerce | Logique de paiement, panier, commandes | WooCommerce Anti-Fraud, plugins de gateway |
| Données | Base SQL, sauvegardes, fichiers clients | Restic, sauvegarde chiffrée |
La checklist qui suit balaye ces 5 couches.
2. 🔴 Critique : 10 points à régler en 24 heures
✅ 1. HTTPS valide partout
Vérifiez sur SSL Labs — visez un score A. Forcez la redirection HTTP → HTTPS dans wp-config.php :
define( 'FORCE_SSL_ADMIN', true );
if ( strpos( $_SERVER['HTTP_X_FORWARDED_PROTO'] ?? '', 'https' ) !== false ) {
$_SERVER['HTTPS'] = 'on';
}
✅ 2. Double authentification sur wp-admin
Plugins gratuits éprouvés : WP 2FA, Two Factor, ou la 2FA intégrée dans Wordfence Login Security. Activez-la pour tous les comptes ayant un rôle ≥ Editor.
✅ 3. Mots de passe d’admin uniques et longs
Aucun « admin / admin123 ». Générez un mot de passe de 20+ caractères via votre gestionnaire (Bitwarden, 1Password, KeePassXC) et stockez-le là.
✅ 4. Renommer ou cacher /wp-admin/login
Réduit le bruit des attaques par force brute. Plugins : WPS Hide Login (gratuit), ou règle NGINX :
location ~ ^/wp-login\.php$ {
rewrite ^.* /mon-login-secret-2026? permanent;
}
✅ 5. Limiter les tentatives de connexion
Wordfence ou Solid Security le font nativement. Configurez : 5 tentatives échouées → blocage 1 heure.
✅ 6. Désinstaller tous les plugins/thèmes inutilisés
Chaque plugin = surface d’attaque supplémentaire. Règle d’or : si un plugin n’est pas utilisé chaque mois, désinstallez-le (ne le désactivez pas seulement, désinstallez-le).
✅ 7. Aucun plugin ou thème nulled
Les versions piratées de plugins payants contiennent systématiquement des backdoors. Si vous n’avez pas le budget pour la version payante, cherchez l’équivalent gratuit dans le dépôt officiel WordPress.
✅ 8. WordPress, thème et plugins à jour
Activez les mises à jour automatiques pour les mineures :
// wp-config.php
define( 'WP_AUTO_UPDATE_CORE', 'minor' );
Pour les plugins critiques, activez l’auto-update individuellement dans wp-admin → Extensions.
✅ 9. Sauvegarde fonctionnelle ET testée
Une sauvegarde non testée est une promesse, pas une sauvegarde. UpdraftPlus (gratuit) vers Google Drive ou Dropbox suffit pour démarrer. Testez la restauration sur un environnement de staging.
✅ 10. Cloudflare en frontal (offre gratuite)
L’offre gratuite de Cloudflare bloque la majorité des attaques bot et DDoS. Configuration en 15 minutes :
- Créer un compte Cloudflare
- Ajouter votre domaine
- Changer les nameservers chez votre registrar pour ceux fournis par Cloudflare
- Activer en dashboard : SSL/TLS Full (strict), Always Use HTTPS, Bot Fight Mode
3. 🟠 Important : 10 points à régler dans la semaine
✅ 11. SPF, DKIM, DMARC sur le domaine
Sinon n’importe qui peut envoyer un email en se faisant passer pour commande@votre-boutique.sn. Vérification :
dig TXT votre-boutique.sn | grep -i spf
dig TXT _dmarc.votre-boutique.sn
✅ 12. Headers de sécurité HTTP
Ajoutez via NGINX, Apache, ou plugin (Solid Security les ajoute automatiquement) :
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
Vérifiez le résultat sur securityheaders.com.
✅ 13. Désactiver l’édition de fichiers depuis wp-admin
// wp-config.php — empêche un attaquant qui prend wp-admin de modifier les .php
define( 'DISALLOW_FILE_EDIT', true );
define( 'DISALLOW_FILE_MODS', true );
✅ 14. Désactiver l’API REST WordPress pour les non-connectés
Si vous n’utilisez pas l’API REST publiquement (cas le plus courant), restreignez-la. Plugin Disable WP REST API ou code dans functions.php :
add_filter( 'rest_authentication_errors', function( $result ) {
if ( ! empty( $result ) ) return $result;
if ( ! is_user_logged_in() ) {
return new WP_Error( 'rest_not_logged_in', 'Auth requise', [ 'status' => 401 ] );
}
return $result;
} );
✅ 15. Désactiver XML-RPC
Très utilisé pour les attaques par amplification. Si vous n’utilisez pas l’application mobile WordPress :
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}
✅ 16. Pare-feu serveur (UFW) actif
Sur Ubuntu :
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status verbose
✅ 17. fail2ban contre les attaques SSH et HTTP
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
⚠️ Pour protéger WordPress avec fail2ban, le filtre n’existe pas en natif — il faut soit installer le plugin WordPress WP fail2ban (qui crée les logs et le filtre), soit créer manuellement le filtre /etc/fail2ban/filter.d/wordpress.conf avec une regex correspondant à votre format de log NGINX. Voir la documentation officielle du plugin WP fail2ban.
✅ 18. Permissions de fichiers correctes
# Depuis la racine de votre site WordPress
sudo find . -type d -exec chmod 755 {} \;
sudo find . -type f -exec chmod 644 {} \;
sudo chmod 600 wp-config.php
sudo chown -R www-data:www-data .
✅ 19. Sécuriser wp-config.php au niveau serveur
location = /wp-config.php { deny all; }
location ~ /\.(?!well-known).* { deny all; }
✅ 20. Surveillance des fichiers modifiés
Wordfence et Solid Security le font automatiquement. Vous recevez un email si un fichier core est modifié — signal fort de compromission.
4. 🟢 Avancé : 10 points pour un hardening complet
✅ 21. WAF Cloudflare — règles personnalisées
Sur Cloudflare gratuit, vous pouvez créer 5 règles WAF custom. Exemples utiles :
- Bloquer les requêtes vers
/wp-login.phpqui n’ont pas de Referer du même domaine - Bloquer les pays d’où vous n’avez aucun client (geo-blocking)
- Challenge JS pour les requêtes
POSTvers/xmlrpc.phpou/wp-admin/admin-ajax.phpdepuis une IP non-vue
✅ 22. Audit des logs WooCommerce
Activez les logs WooCommerce :
WooCommerce → Réglages → Avancé → Outils de l’API → Activer les journaux
Surveillez régulièrement /wp-content/uploads/wc-logs/. Toute commande à un montant inhabituel ou avec un comportement de panier suspect doit déclencher une alerte.
✅ 23. Plugin anti-fraude pour les commandes
Plugins dédiés (gratuits ou freemium) : WooCommerce Anti-Fraud, NoFraud, FraudLabs Pro. Configurez le scoring sur :
– Adresse IP différente du pays de facturation
– Email haute risque (Mailinator, Guerrilla Mail)
– Carte bancaire avec adresse non vérifiée
✅ 24. Paiements via aggregateur africain certifié
Pour intégrer Wave, Orange Money, et cartes bancaires, utilisez des aggregateurs reconnus dans la région : PayDunya, CinetPay, PayTech (vérifier les disponibilités et conditions sur leurs sites officiels). Évitez d’implémenter vous-même les API mobile money — la complexité de sécurité est élevée.
✅ 25. Chiffrement de la base de données — au minimum les champs sensibles
WooCommerce stocke en clair les adresses postales et téléphones des clients. Pour une boutique gérant des données sensibles, considérez :
– Chiffrement complet du disque (LUKS sur le VPS)
– Plugins de chiffrement de champs (recherche : WordPress field encryption)
– Pseudonymisation des données après expiration de l’obligation de conservation
✅ 26. Politique de mots de passe pour les clients
Imposez aux clients un minimum de 10 caractères, avec mot de passe vérifié contre les fuites connues. Plugin : Password Policy Manager.
✅ 27. CAPTCHA sur les formulaires sensibles
Cloudflare Turnstile (gratuit, alternative à reCAPTCHA, sans tracking utilisateur) sur :
– Formulaire de connexion
– Formulaire d’inscription
– Formulaire de contact
– Page de paiement (si applicable)
✅ 28. Sauvegarde immutable hors site
Avec Restic + Backblaze B2 ou Wasabi, activez l’object-lock côté stockage : aucune sauvegarde ne peut être supprimée pendant N jours, même par un attaquant qui a compromis vos identifiants.
# Sauvegarde quotidienne WordPress + base SQL avec Restic
#!/bin/bash
export RESTIC_REPOSITORY="b2:nom-bucket:wordpress"
export RESTIC_PASSWORD_FILE="/root/.restic-pass"
export B2_ACCOUNT_ID="..."
export B2_ACCOUNT_KEY="..."
# Dump SQL
mysqldump -u wpuser -p"$DB_PASS" wordpress | gzip > /tmp/wp-$(date +%F).sql.gz
# Sauvegarde fichiers + dump
restic backup /var/www/html /tmp/wp-$(date +%F).sql.gz \
--tag daily --exclude '*.log' --exclude 'cache/*'
# Politique de rétention : 7 quotidiennes, 4 hebdo, 12 mensuelles
restic forget --tag daily --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
rm /tmp/wp-*.sql.gz
À programmer en cron : 0 2 * * * /opt/scripts/wp-backup.sh.
✅ 29. Analyse régulière du code par WPScan
WPScan maintient une base de vulnérabilités WordPress. Version CLI gratuite (rate-limitée — créer un compte gratuit pour obtenir un token API).
Option 1 — Installation native (Linux Ubuntu/Debian, demande des dépendances de compilation) :
sudo apt install -y ruby-full build-essential libcurl4-openssl-dev \
libxml2 libxml2-dev libxslt1-dev ruby-dev libgmp-dev zlib1g-dev
sudo gem install wpscan
wpscan --url https://votre-boutique.sn --enumerate vp,vt,u --api-token VOTRE_TOKEN
Option 2 — Image Docker (plus simple, sans dépendances système) :
docker run --rm wpscanteam/wpscan --url https://votre-boutique.sn \
--enumerate vp,vt,u --api-token VOTRE_TOKEN
✅ 30. Plan de réponse à incident testé
Document d’une page, accessible hors ligne, qui répond à :
– Qui prévenir (avec numéros de téléphone) ?
– Comment isoler le site (page de maintenance + accès direct au serveur) ?
– Modèle de communication clients en cas de fuite
– Délai légal de notification à la CDP (consultez cdp.sn)
Faites un exercice annuel : simuler un incident, mesurer le temps de réaction, ajuster.
5. Audit automatisé : commandes prêtes à l’emploi
À exécuter sur votre serveur WordPress (Linux) une fois par mois.
#!/bin/bash
# audit-wordpress.sh — audit rapide d'une installation WordPress
set -e
WP_PATH="${1:-/var/www/html}"
echo "=== Audit WordPress: $WP_PATH ==="
echo -e "\n[1] Version WordPress"
grep "wp_version =" "$WP_PATH/wp-includes/version.php" 2>/dev/null
echo -e "\n[2] Permissions wp-config.php"
stat -c "%a %U:%G %n" "$WP_PATH/wp-config.php"
echo -e "\n[3] Fichiers .php récemment modifiés (< 7 jours)"
find "$WP_PATH" -name "*.php" -mtime -7 -type f 2>/dev/null | head -20
echo -e "\n[4] Sécurité wp-config — clés salt présentes ?"
grep -c "AUTH_KEY" "$WP_PATH/wp-config.php"
echo -e "\n[5] DEBUG activé ? (devrait être false en prod)"
grep "WP_DEBUG" "$WP_PATH/wp-config.php" | grep -v "^//"
echo -e "\n[6] DISALLOW_FILE_EDIT actif ?"
grep "DISALLOW_FILE_EDIT" "$WP_PATH/wp-config.php" || echo "❌ NON ACTIF"
echo -e "\n[7] Plugins installés"
ls "$WP_PATH/wp-content/plugins/" 2>/dev/null | grep -v "^index\.php$"
echo -e "\n[8] Thèmes installés"
ls "$WP_PATH/wp-content/themes/" 2>/dev/null
echo -e "\n[9] Fichiers suspects à la racine ?"
ls "$WP_PATH"/*.php 2>/dev/null | grep -v -E "(index|wp-)\.php$"
echo -e "\n[10] HTTPS forcé ?"
grep "FORCE_SSL_ADMIN" "$WP_PATH/wp-config.php" || echo "❌ NON ACTIF"
echo -e "\n=== Audit terminé ==="
Sauvegarder, rendre exécutable :
chmod +x audit-wordpress.sh
./audit-wordpress.sh /var/www/html
6. FAQ
Quel plugin de sécurité choisir : Wordfence, Solid Security ou autre ?
Pour une PME qui démarre, Wordfence Free est l’option la plus complète en gratuit (pare-feu, scanner malware, login security). Solid Security (anciennement iThemes Security) est plus léger et propose une meilleure intégration UX. Tous les deux conviennent — l’important est d’en avoir un actif et de configurer les notifications email.
Faut-il chiffrer toute la base de données ?
Pour la majorité des PME, le chiffrement complet du disque du serveur (LUKS au moment de la création du VPS) suffit. Le chiffrement applicatif des champs sensibles est utile pour les boutiques manipulant des données très sensibles (santé, finance) — mais complexifie significativement la maintenance.
Mon hébergeur dit avoir « tout sécurisé ». Je peux ne rien faire ?
Non. Un hébergeur sécurise le serveur et l’infrastructure. Vous restez responsable de WordPress, ses plugins, son thème, ses comptes et ses données. La grande majorité des piratages WordPress viennent de la couche applicative, pas du serveur.
Quelle est la fréquence raisonnable de sauvegarde pour une boutique active ?
Pour une boutique recevant 10+ commandes par jour : sauvegarde quotidienne des fichiers et de la base. Pour une boutique très active (>100 commandes/jour) : sauvegarde toutes les 6 heures au minimum, avec rétention versionnée 30 jours.
Comment savoir si ma boutique est déjà compromise ?
Signaux : nouveaux fichiers .php à des emplacements inhabituels (racine, wp-content/uploads/), administrateurs inconnus dans wp-admin → Utilisateurs, redirections vers des sites tiers, ralentissements inexpliqués, alertes de Google Search Console (« le site contient du contenu trompeur »). Lancez Wordfence Scan + le script audit ci-dessus.
Articles liés (cluster Cybersécurité PME)
- 👉 Cybersécurité PME au Sénégal : le guide complet 2026 — l’article pilier
- 👉 Phishing par WhatsApp : comment former vos employés
- 👉 Sauvegarde 3-2-1 sur connexion limitée pour PME africaines
Article mis à jour le 25 avril 2026. Pour signaler une erreur ou suggérer une amélioration, écrivez-nous.