Conseils pour sécuriser votre site WordPress
Fabian Piau | mercredi 10 octobre 2018 - 18:4314 Janvier 2021 : Mise à jour des security headers, remplacement de « Feature-policy » par « Permissions-policy ».
WordPress est l’un des systèmes de gestion de contenu (CMS) les plus populaires. Cette popularité signifie également que c’est une cible de choix pour les pirates.
Dans cet article, je vais vous donner quelques conseils pour protéger votre site web et éviter les attaques.
1. Utiliser les dernières versions
Cela est vrai pour WordPress, mais également pour toutes vos extensions. De nouvelles versions sont disponibles régulièrement. Si un plugin n’a pas été mis à jour depuis un moment, il n’est probablement plus maintenu et vous devriez sérieusement songer à le supprimer ou le remplacer. Dans une moindre mesure, ceci est également applicable pour votre thème.
La version de PHP utilisée est également importante. Vérifiez auprès de votre fournisseur d’hébergement que vous utilisez la dernière version de PHP (7.X), en particulier, les versions 5.X ne seront plus supportées d’ici la fin de l’année.
Notez également que plus vous installez d’extensions, plus vous prenez des risques, car votre configuration WordPress reposera sur davantage de code tiers. Vous ne devriez garder que les plugins dont vous avez vraiment besoin. Si un plugin est désactivé, ne conservez pas son code source et supprimez tous les fichiers associés.
2. Utiliser des identifiants de connexion sécurisés
Ne jamais utiliser l’utilisateur admin par défaut. Si c’est votre cas, désactivez ce compte et créez votre propre compte avec un nom d’utilisateur personnalisé.
Choisissez un mot de passe complexe. Si plusieurs utilisateurs gèrent votre site Web, assurez-vous que les autorisations sont valides et évitez de donner le droit d’administration à tout le monde.
3. Scanner votre site web
C’est un moyen facile et rapide de trouver des vulnérabilités et de voir si l’un de vos plugins est vulnérable ou non. Vous pouvez utiliser ces 2 outils en ligne:
- WordPress Security Scan (mon préféré avec un rapport détaillé)
- WPSec
4. Utiliser des fichiers .htaccess pour protéger vos répertoires
Le fichier .htaccess
est un fichier de configuration pour le serveur. Il vous permet de définir des règles à suivre par celui-ci.
Par exemple, dans /wp-content/uploads
, j’ai créé le fichier .htaccess
suivant:
# Refuser l'accès à tout par défaut Order deny,allow Deny from all # Autoriser l'accès aux fichiers multimédia <FilesMatch '\.(jpg|jpeg|png|gif|bmp|zip|rar|pdf)$'> Allow from all </FilesMatch>
Cette configuration garantit que seuls les fichiers multimédias sont accessibles à partir du navigateur. Tous les fichiers JavaScript et PHP seront non accessibles. Ce n’est pas sans faille, car seule l’extension est vérifiée, mais c’est mieux que rien.
Pour éviter l’exécution de code PHP malveillants dans certains dossiers (par exemple, dans /wp-includes
), vous pouvez créer un autre fichier .htaccess
avec le contenu suivant:
<Files *.php> Order allow,deny Deny from all </Files>
5. Vérifier les autorisations sur les fichiers et répertoires
Assurez-vous que les fichiers critiques (wp-config.php
, php.ini
…) ne sont pas accessibles en écriture publiquement, mais en lecture seule. Seul le propriétaire devrait pouvoir écrire.
6. Utiliser les « security headers »
Vous pouvez consulter cet outil en ligne pour connaître quels headers vous supportez actuellement.
Dans le dossier racine, mettez à jour le fichier .htaccess
et ajoutez:
# Extra Security Headers <IfModule mod_headers.c> Header set Strict-Transport-Security 'max-age=31536000; includeSubDomains' Header set X-XSS-Protection '1; mode=block' Header set X-Frame-Options 'sameorigin' Header set X-Content-Type-Options 'nosniff' Header unset Server Header always unset X-Powered-By Header unset X-Powered-By Header unset X-CF-Powered-By Header unset X-Mod-Pagespeed Header unset X-Pingback </IfModule>
Dans le fichier wp-config.php
, ajoutez:
/** Extra Security */ header('X-Frame-Options: SAMEORIGIN'); header('X-XSS-Protection: 1; mode=block'); header('X-Content-Type-Options: nosniff'); header('Strict-Transport-Security:max-age=31536000; includeSubdomains; preload'); header('Referrer-Policy: no-referrer-when-downgrade'); header('Content-Security-Policy: upgrade-insecure-requests'); header('Permissions-Policy: autoplay=(), camera=(), encrypted-media=(), fullscreen=(), geolocation=(), microphone=(), midi=(), payment=()'); header_remove('X-Powered-By'); header_remove('Server'); header_remove('X-CF-Powered-By'); header_remove('X-Mod-Pagespeed'); header_remove('X-Pingback'); @ini_set('session.cookie_httponly', true); @ini_set('session.cookie_secure', true); @ini_set('session.use_only_cookies', true);
7. Ne pas exposer trop d’informations
Dans le dossier racine de votre site Web, dans php.ini
, ajoutez la ligne suivante:
expose_php = Off
Votre version actuelle de PHP ne sera pas exposée.
8. Sauvegarder votre site régulièrement
Dernier conseil, mais non le moindre! Vous n’avez pas besoin d’un logiciel particulier ou d’un plugin supplémentaire pour y parvenir.
- Avec votre outil FTP préféré (par exemple, Filezilla), enregistrez tous les fichiers disponibles sur votre serveur.
- Pour la base de données, utilisez la fonctionnalité de sauvegarde MySQL disponible. De nombreux hébergeurs fournissent un accès à phpMyAdmin, un outil en ligne.
Je recommande de faire une sauvegarde tous les mois et de conserver l’historique des 6 dernières sauvegardes dans un endroit sûr. Bien évidemment, cela dépend du volume d’articles que vous écrivez et de l’importance de vos données.
C’est tout! Si vous avez fait tout ce qui précède, votre site Web devrait être plus résistant aux attaques. Dans le pire des cas, vous devriez pouvoir restaurer votre site facilement.
Bon blogage sécurisé!
Commentaires récents