ITSkillsCenter
Cybersécurité

Tutoriel : Sécuriser votre site WordPress contre les hackers

7 min de lecture

Pourquoi les sites WordPress sont-ils cibles

WordPress alimente plus de 40% des sites web dans le monde, ce qui en fait la cible preferee des hackers. Un site WordPress pirate peut servir a envoyer du spam, heberger du phishing, miner des cryptomonnaies, rediriger vers des sites malveillants ou voler les donnees de vos clients.

Au Senegal, de nombreux sites d’entreprises et e-commerce tournent sur WordPress avec WooCommerce. Un piratage peut signifier la perte de commandes, de donnees clients et de confiance. Ce guide couvre les protections concretes, du basique a l’avance.

Securite de base : les 10 actions immediates

1. Mises a jour (la protection numero 1)

// Dans wp-config.php : activer les mises a jour automatiques
define('WP_AUTO_UPDATE_CORE', true);

// Mises a jour automatiques des plugins et themes
// Tableau de bord > Extensions > cocher "Activer les mises a jour auto"
// Tableau de bord > Apparence > Themes > cocher "Activer les mises a jour auto"

// Ou via functions.php pour forcer les mises a jour auto des plugins
add_filter('auto_update_plugin', '__return_true');
add_filter('auto_update_theme', '__return_true');

80% des sites WordPress pirates le sont a cause de plugins ou themes non mis a jour.

2. Identifiants securises

  • Supprimez le compte « admin » par defaut. Creez un administrateur avec un nom unique
  • Mot de passe de 16+ caracteres genere aleatoirement
  • Chaque utilisateur doit avoir son propre compte (pas de compte partage)
  • Attribuez les roles corrects : un redacteur n’a pas besoin d’etre administrateur

3. Proteger wp-login.php

# Dans .htaccess : limiter l'acces a wp-login.php par IP
# (si vous avez une IP fixe)

  Order Deny,Allow
  Deny from all
  Allow from VOTRE.IP.FIXE


# Alternative : proteger par mot de passe supplementaire
# Creer un fichier .htpasswd
htpasswd -c /home/user/.htpasswd monuser

# Dans .htaccess

  AuthType Basic
  AuthName "Zone Protegee"
  AuthUserFile /home/user/.htpasswd
  Require valid-user

4. Desactiver XML-RPC

XML-RPC est un ancien protocole rarement utilise mais souvent exploite pour des attaques brute-force :

// Dans functions.php
add_filter('xmlrpc_enabled', '__return_false');

// Ou dans .htaccess (plus efficace car bloque avant PHP)

  Order Deny,Allow
  Deny from all

5. Desactiver l’editeur de fichiers

// Dans wp-config.php : empecher la modification de fichiers depuis l'admin
define('DISALLOW_FILE_EDIT', true);

// Si un hacker obtient un acces admin, il ne pourra pas
// modifier le code des plugins/themes via l'interface

6. Prefixe de table personnalise

// Dans wp-config.php, changez le prefixe par defaut
// Au lieu de :
$table_prefix = 'wp_';
// Utilisez quelque chose de unique :
$table_prefix = 'itsc7k_';
// ATTENTION : a faire AVANT l'installation ou avec un outil de migration

7. Masquer la version de WordPress

// Dans functions.php
remove_action('wp_head', 'wp_generator');

// Supprimer aussi la version des scripts et styles
add_filter('style_loader_src', function($src) {
    return remove_query_arg('ver', $src);
});
add_filter('script_loader_src', function($src) {
    return remove_query_arg('ver', $src);
});

8. Proteger wp-config.php

# Dans .htaccess

  Order Allow,Deny
  Deny from all


# Deplacer wp-config.php un niveau au-dessus du dossier public
# Si WordPress est dans /var/www/html/
# Deplacez wp-config.php dans /var/www/
# WordPress le trouvera automatiquement

9. Desactiver le listage des repertoires

# Dans .htaccess
Options -Indexes

# Empeche l'acces a /wp-content/uploads/ et la navigation dans vos dossiers

10. HTTPS obligatoire

// Dans wp-config.php
define('FORCE_SSL_ADMIN', true);

// Redirection HTTP vers HTTPS dans .htaccess
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Securite avancee : headers et configuration serveur

Headers de securite (Nginx)

# Dans le bloc server de Nginx
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Content-Security-Policy "default-src 'self' https:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https:; style-src 'self' 'unsafe-inline' https:; img-src 'self' data: https:;" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;

# Cacher la version de Nginx
server_tokens off;

Headers de securite (Apache .htaccess)

# Headers de securite pour Apache
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

# Desactiver la signature serveur
ServerSignature Off

Protection contre les attaques brute-force

Avec Fail2Ban (serveur VPS)

# Installer Fail2Ban
sudo apt install fail2ban -y

# Creer le filtre WordPress
sudo nano /etc/fail2ban/filter.d/wordpress.conf

[Definition]
failregex = ^ .* "POST /wp-login.php
            ^ .* "POST /xmlrpc.php

# Creer la jail
sudo nano /etc/fail2ban/jail.local

[wordpress]
enabled = true
port = http,https
filter = wordpress
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 3600
findtime = 300

# Redemarrer Fail2Ban
sudo systemctl restart fail2ban

# Verifier le statut
sudo fail2ban-client status wordpress

Avec un plugin (hebergement mutualise)

Si vous n’avez pas acces au serveur, utilisez un plugin :

  • Limit Login Attempts Reloaded (gratuit) : bloque les IP apres X tentatives echouees
  • WPS Hide Login (gratuit) : change l’URL de connexion de /wp-login.php vers une URL personnalisee (/mon-acces-secret par exemple)
  • Wordfence (gratuit/premium) : pare-feu applicatif + protection brute-force + scan de malware

Securiser WooCommerce (e-commerce)

Pour les boutiques en ligne senegalaises avec paiement Wave/Orange Money :

// Dans functions.php : securiser WooCommerce

// 1. Forcer SSL sur les pages de paiement
add_action('template_redirect', function() {
    if (is_checkout() && !is_ssl()) {
        wp_redirect(str_replace('http:', 'https:', home_url($_SERVER['REQUEST_URI'])), 301);
        exit;
    }
});

// 2. Limiter les tentatives de commande (anti-fraude)
add_action('woocommerce_checkout_process', function() {
    $ip = $_SERVER['REMOTE_ADDR'];
    $transient_key = 'order_limit_' . md5($ip);
    $count = get_transient($transient_key);
    if ($count && $count >= 5) {
        wc_add_notice('Trop de tentatives. Reessayez dans 1 heure.', 'error');
    }
    set_transient($transient_key, ($count ? $count + 1 : 1), 3600);
});

// 3. Desactiver l'enumeration des utilisateurs
add_action('template_redirect', function() {
    if (isset($_GET['author']) && is_numeric($_GET['author'])) {
        wp_redirect(home_url(), 301);
        exit;
    }
});

Sauvegardes WordPress

Sauvegarde automatisee avec WP-CLI

#!/bin/bash
# Script de sauvegarde WordPress quotidien

SITE_DIR="/var/www/monsite.sn"
BACKUP_DIR="/backups/wordpress"
DATE=$(date +%Y-%m-%d)

mkdir -p "$BACKUP_DIR/$DATE"

# Sauvegarde base de donnees
wp db export "$BACKUP_DIR/$DATE/database.sql" --path=$SITE_DIR

# Sauvegarde fichiers
tar -czf "$BACKUP_DIR/$DATE/files.tar.gz" -C $SITE_DIR .

# Supprimer les sauvegardes de plus de 30 jours
find $BACKUP_DIR -type d -mtime +30 -exec rm -rf {} +

# Envoyer vers un stockage distant (optionnel)
rclone copy "$BACKUP_DIR/$DATE" remote:backups/wordpress/$DATE

echo "Sauvegarde terminee : $BACKUP_DIR/$DATE"
# Cron pour executer chaque nuit a 3h
0 3 * * * /home/user/scripts/backup-wordpress.sh >> /var/log/wp-backup.log 2>&1

Scanner et nettoyer un site pirate

Signes d’un piratage

  • Redirections vers des sites suspects
  • Pages de spam ou de phishing ajoutees a votre site
  • Utilisateurs administrateurs inconnus dans le tableau de bord
  • Fichiers suspects dans wp-content/uploads/ ou a la racine
  • Google affiche « Ce site peut etre pirate » dans les resultats
  • Emails de spam envoyes depuis votre serveur

Nettoyage etape par etape

# 1. Scanner avec WP-CLI
wp plugin verify-checksums --all --path=/var/www/monsite.sn
wp core verify-checksums --path=/var/www/monsite.sn

# 2. Chercher les fichiers suspects
find /var/www/monsite.sn -name "*.php" -newer /var/www/monsite.sn/wp-config.php -mtime -7
find /var/www/monsite.sn -name "*.php" | xargs grep -l "eval(base64_decode"
find /var/www/monsite.sn -name "*.php" | xargs grep -l "exec(\|system(\|passthru("
find /var/www/monsite.sn/wp-content/uploads -name "*.php"

# 3. Verifier les utilisateurs admin
wp user list --role=administrator --path=/var/www/monsite.sn
# Supprimer les comptes inconnus
wp user delete ID_SUSPECT --reassign=1 --path=/var/www/monsite.sn

# 4. Reinstaller WordPress proprement
wp core download --force --path=/var/www/monsite.sn

# 5. Reinstaller tous les plugins depuis le depot officiel
wp plugin install PLUGIN_NAME --force --path=/var/www/monsite.sn

# 6. Changer tous les mots de passe
wp user update 1 --user_pass="NouveauMotDePasse" --path=/var/www/monsite.sn

# 7. Regenerer les cles de securite
wp config shuffle-salts --path=/var/www/monsite.sn

Plugins de securite recommandes

Plugin Gratuit Points forts Ideal pour
Wordfence Oui (premium optionnel) Pare-feu, scan malware, protection brute-force Protection complete
Sucuri Security Oui (premium optionnel) Audit, scan, CDN/WAF (premium) Sites a fort trafic
iThemes Security Oui (premium optionnel) Durcissement, 2FA, surveillance fichiers Facilite d’utilisation
WPS Hide Login Oui Changer l’URL de connexion Protection basique
Limit Login Attempts Oui Anti brute-force simple Solution legere

Checklist securite WordPress

  • WordPress, plugins et themes a jour (mises a jour auto activees)
  • Compte « admin » supprime, identifiants forts et uniques
  • Authentification a deux facteurs activee pour les admins
  • XML-RPC desactive
  • Editeur de fichiers desactive (DISALLOW_FILE_EDIT)
  • wp-config.php protege
  • Listage de repertoires desactive
  • HTTPS force sur tout le site
  • Headers de securite configures
  • Protection brute-force active (Fail2Ban ou plugin)
  • Sauvegardes automatiques quotidiennes avec copie deconnectee
  • Plugins et themes inutilises supprimes (pas juste desactives)
  • Permissions fichiers correctes (644 pour fichiers, 755 pour dossiers)
#plugins #sécurité #wordpress
Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 350.000 FCFA
Parlons de Votre Projet
Publicité

Articles Similaires