Les bonnes pratiques de sécurité sur WordPress

La popularité de WordPress possède ses inconvénients, en particulier concernant la sécurité. De trop nombreux robots peuvent essayer d’accéder aux failles potentielles des sites pour diverses raisons, généralement malsaines. Cet article recense les bonnes pratiques à respecter ainsi que divers plugins tout autant utile (liste non-exhaustive).

Mise à jour septembre 2017 : merci Julio de SecuPress pour les petits correctifs.

Les bonnes pratiques simples à respecter

Pas besoin de faire des efforts démesuré ou d’être un expert informatique pour respecter des bonnes pratiques.

  • Lors de l’installation, n’utilisez pas le préfixe « wp_ » pour les tables de la base de données. Consultez ce tutoriel expliquer comment modifier le préfixe des tables WordPress, si ce CMS a déjà été installé.
  • (Supprimer le premier utilisateur : mauvaise idée, explication sur la vidéo de Julio).
  • Créer un utilisateur « administrateur » pour effectuer tout ce qui concerne le site, et un utilisateur avec le rôle « rédacteur » pour publier le contenu.
  • Utiliser un mot de passe long, car les attaques par brute force sont très fréquentes.
  • Désinstaller tous les thèmes et plugins qui ne sont pas actif. Ce serait dommage de subir une attaque à partir de la faille de sécurité d’un plugin même pas utilisé.
  • Supprimer les utilisateurs inactifs.
  • Bien choisir ses plugins et son thème :
    • Chercher sur une base sûre et fiable.
    • S’assurer que le plugin est un peu connu et maintenu.
    • Faire des recherches pour s’assurer qu’il n’y a pas de mauvaises publicités autour d’un plugin ou un mauvais historique.
    • Utiliser un plugin qui scanne le contenu des fichiers pour vérifier qu’il n’y a pas de virus.
  • Mettre à jour les plugins rapidement s’ils indiquent avoir corrigé une faille de sécurité.
  • Ne pas s’empresser de mettre à jour les plugins s’il n’y a pas d’urgence et qu’il n’y a pas nécessairement de mise à jour de sécurité.
  • Désactiver l’accès anonyme à l’API REST qui permet d’obtenir les identifiants de tous vos utilisateurs (plugin : Disable REST API).
  • Connectez-vous avec SFTP plutôt que FTP.

Bonnes pratiques un peu plus technique

Avec un peu de connaissance technique, il est possible d’aller plus loin dans l’amélioration de la sécurité.

 

Protéger la page de connexion avec un .htaccess pour autoriser les connexions à partir d’une adresse IP exclusivement

Le code ci-dessous est à adapter en indiquant une ou plusieurs adresses IP (à la place des « x ») :

<Files wp-login.php>
order deny,allow
Deny from all
Allow from xx.xxx.xxx.xxx
</Files>

Protéger le fichier wp-config.php avec un .htaccess

Le code ci-dessous peut être utilisé :

<files wp-config.php>
order allow,deny
deny from all
</files>

Protéger le répertoire /wp-content/uploads/ avec un .htaccess pour empêcher l’exécution de fichier « .php »

Un fichier .htaccess peut être ajouté dans le répertoire /wp-content/uploads/. Ce code peut être utilisé pour bloquer l’exécution d’un fichier potentiellement ajouté dans ce répertoire :

<FilesMatch « \.(?:php)$ »>
Order allow,deny
Deny from all
</FilesMatch>

Ne pas afficher les erreurs PHP

Modifier dans wp-config.php :

define (‘WP_DEBUG’, false);

define(‘WP_DEBUG_DISPLAY’, false);

La ligne « WP_DEBUG_DISPLAY » à false permet de s’assurer que l’installation PHP n’affiche pas les erreurs. Cela reviens au même que d’ajouter par exemple cette ligne dans le .htaccess :

php_flag display_errors off

Ne pas afficher le contenu des dossiers de l’hébergement s’il n’y a pas de index.php

Une ligne peut être ajoutée dans le .htaccess pour empêcher l’hébergement d’afficher le contenu des répertoires :

Options –Indexes

A noter : certains hébergeurs ont d’ores et déjà bloqué cet affichage.

 

Masquer le message des erreurs de connexion

La page de connexion affiche des messages d’erreurs trop précis. Il est possible de masquer ces messages d’erreur en ajoutant le code suivant dans le fichier functions.php de son thème :

add_filter(‘login_errors’, ‘__return_null’);

Désactiver l’éditeur de fichier au sein du back office de WordPress

Modifier dans wp-config.php :

define( ‘DISALLOW_FILE_EDIT’, true );

Isoler l’installation de PhpMyAdmin

Evitez d’avoir l’installation PhpMyAdmin accessible à une adresse telle que monsite.com/phpmyadmin/.

Migrer vers https

L’activation de HTTPS sur une installation WordPress offre une protection supplémentaire.

Alex du site WP Marmite à rédigé un long article à ce sujet : Comment passer son site WordPress en HTTPS.

Mauvaises idées (ou à débattre …)

Masquer le numéro de version

Connaître la version de WordPress permet de mieux cibler les failles potentiellement exploitable. Il est ainsi possible de suivre ce tutoriel expliquant comment masquer le numéro de version sur WordPress. Il est aussi possible de supprimer le fichier readme.html qui informe sur la version WordPress.

Attention, cette technique est bancale puisqu’il est toujours possible pour un individu mal intentionné ou un script de vérifier la présence de fichiers ajoutés dans telle ou telle version de WordPress.

Par ailleurs, il peut aussi simplement y avoir des attaques sur votre site, à l’aveugle, « dans le doute, même sans connaître votre version de WordPress« .

Protéger le répertoire /wp-admin/ avec un .htaccess et .htpasswd.

Attention, cela peu aussi bloquer le bon fonctionnement de certains plugins.

A propos des clés secrètes du fichier wp-config.php

Par défaut, le fichier wp-config.php contient des clés de sécurité. Si les clés n’ont pas été générées correctement, il est possible de les ajouter manuellement. Soit en créant une phrase que vous seul connaissez, soit grâce à un générateur en ligne : https://api.wordpress.org/secret-key/1.1/salt/

Limite de cette méthode : si le fichier wp-config.php est dérobé par un utilisateur malveillant, il aura accès à ces clés. En enlevant les clés du fichier, WordPress enregistrera les clés en base de données. Dès lors, si vos accès sont bien protégés, les clés ne seront pas lisible.

Il est possible d’utiliser un plugin qui stockera les clés dans un fichier généré, dont le nom ne sera pas connu des personnes malveillantes.

Sauvegarde régulière

Plusieurs plugins permettent de sauvegarder le contenu et les fichiers à intervalle régulier (cf. backup). Il en existe plusieurs, qui peuvent enregistrer les données ou fichiers, sur des plateformes telles que Google Drive ou Dropbox. A vous de faire votre choix, en voici quelques uns :

A noter : certains fichiers malveillants restent en sommeil pendant plus de 3 mois avant de s’activer, car ils se doutent que votre plus vieux backup ne dépasse pas 3 mois, et donc que vous aurez du mal à restaurer une version sans les fichiers malveillants. Il pourrait vous être utile de conserver un vieil historique de plus de 3 mois pour éviter cette problématique (mais c’est forcément plus utile pour les sites peu souvent mis à jour).

Plugins recommandés

Certains plugins sont spécialisés dans la sécurité WordPress. Attention, installer un ou plusieurs de ces plugin ne signifie en aucun cas que votre installation est devenue miraculeusement protégée de toutes attaques, ce sont juste des aides sur certains points de failles de sécurité.

Autre

Pensez également à d’autres points qui sont tout autant important :

  • Ne donnez pas un accès à vos fichiers à n’importe qui
  • Ne donnez pas les mots de passes (hébergeur, FTP, boite email …) à n’importe qui (créez des comptes provisoires, avec restrictions d’accès)
  • Attention au mot de passe de votre adresse de messagerie
  • Attention aux questions secrètes trop facile pour retrouver le mot de passe de votre messagerie

Pensez à ajouter vos propres conseils dans les commentaires et à vérifier par vous mêmes les conseils évoqué ici. Ne croyez personne sur parole.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.