Accueil / Tutoriels Serveur / Sécurité WordPress 2025 — Checklist + Snippets

Sécurité WordPress 2025 — Checklist + Snippets

Sécurité WordPress 2025 — Checklist + Snippets
Sécurité WordPress 2025 — Checklist + Snippets

Checklist terrain pour sécuriser WordPress en 2025 : comptes, permissions, headers/CSP, PHP, constantes WP, uploads, backups, pare-feu, monitoring. Snippets prêts à coller.

Pourquoi sécuriser WordPress en 2025 ?

Les attaques les plus fréquentes restent prévisibles : bruteforce de comptes, plugins vulnérables, exécutions abusives dans uploads, leaks via headers ou mauvais droits. Le but du durcissement est simple : réduire la surface d’attaque, détecter tôt, et restaurer vite en cas de pépin.

Pré-requis & inventaire

  • WordPress et PHP à jour (idéalement PHP 8.x).
  • Liste claire des plugins / thème enfant / accès FTP ou SSH.
  • Accès sudo si serveur dédié/VPS.

Inventaire rapide :

wp core version && php -v
wp plugin list --format=table

Comptes & authentification

Bonnes pratiques

  • Supprime les comptes inactifs, applique le rôle minimal.
  • Active une 2FA (application TOTP) pour l’admin.
  • Empêche l’énumération d’auteurs via l’URL ?author=.

.htaccess (bloquer /?author=) :

RewriteEngine On
RewriteCond %{QUERY_STRING} author=\d
RewriteRule ^ - [F]

Fichiers & permissions

Réglages recommandés (adapter le chemin) :

sudo chown -R www-data:www-data /var/www/html/wordpress
find /var/www/html/wordpress -type d -exec chmod 750 {} \;
find /var/www/html/wordpress -type f -exec chmod 640 {} \;
chmod 600 /var/www/html/wordpress/wp-config.php

En-têtes de sécurité (Apache)

Fichier : /etc/apache2/conf-available/security-headers.conf

<IfModule mod_headers.c>
  Header always set X-Content-Type-Options "nosniff"
  Header always set X-Frame-Options "SAMEORIGIN"
  Header always set Referrer-Policy "strict-origin-when-cross-origin"
  Header always set Permissions-Policy "accelerometer=(), geolocation=(), microphone=(), camera=()"
  Header always set X-XSS-Protection "1; mode=block"
  Header always set Content-Security-Policy "default-src 'self'; img-src 'self' data: https:; style-src 'self' 'unsafe-inline' https:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https:; font-src 'self' data: https:; frame-ancestors 'self';"
</IfModule>

Activer & recharger :

sudo a2enmod headers
sudo a2enconf security-headers
sudo systemctl reload apache2

Astuce : active HSTS uniquement après avoir validé le HTTPS partout (sinon risque de blocage).

PHP — durcissement

Évite de casser l’admin WP : valeurs pragmatiques dans le php.ini.

upload_max_filesize = 32M
post_max_size = 34M
expose_php = Off
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source

Constantes WP utiles

Dans wp-config.php :

define('DISALLOW_FILE_EDIT', true);
define('FORCE_SSL_ADMIN', true);
define('WP_AUTO_UPDATE_CORE', true);

Uploads : interdire PHP

Crée (ou édite) /wp-content/uploads/.htaccess :

<FilesMatch "\.php$">
  Require all denied
</FilesMatch>

Backups & restauration testée

  • Stratégie 3-2-1 : 3 copies, 2 supports, 1 hors-site.
  • Teste régulièrement la restauration (staging).

Exemples :

tar -czf /backup/wp-files-$(date +%F).tar.gz /var/www/html/wordpress
mysqldump -u wordpress -p wordpress > /backup/wp-db-$(date +%F).sql

Pare-feu & surveillance

  • UFW : autorise OpenSSH et Apache Full, limite SSH.
  • Surveille /var/log/apache2/, /var/log/mysql/ et les accès.

À lire ensuite (maillage interne)

FAQ

Comment activer HSTS sans casser l’admin ?

Active d’abord le HTTPS partout (frontend, admin, médias). Vérifie que toutes les ressources chargent en HTTPS. Ensuite, ajoute HSTS avec une durée progressive (ex. 1 semaine) avant de passer à 1 an et preload.

Ma CSP bloque des scripts du thème, que faire ?

Commence par une CSP “pragmatique” (ci-dessus). Identifie les domaines nécessaires (CDN, polices) et autorise-les explicitement. Une CSP stricte avec nonce/sha-256 est idéale mais demande un inventaire précis des ressources.

Quelles permissions exactes pour wp-config.php ?

600 pour le fichier, possédé par l’utilisateur du serveur web (souvent www-data). Le dossier racine WordPress reste en 750 pour les répertoires et 640 pour les fichiers.

Comment tester mes backups ?

Crée un environnement de staging, restaure la base et les fichiers, vérifie l’ouverture du site et l’accès admin. Programme un test trimestriel pour éviter les mauvaises surprises.

Quel plugin 2FA léger recommandes-tu ?

Un plugin TOTP simple (authenticator) suffit pour l’admin. Évite les usines à gaz si tu n’en as pas l’usage. L’objectif est la fiabilité, pas la complexité.

Étiquetté :