15 bonnes pratiques de sécurité pour WordPress
Cet article afin de vous donner les trucs & astuces essentiels afin de vous prémunir de différentes infiltrations (VIRUS, SPAM, Phishing,…) dans votre CMS préféré à savoir WordPress. Ces procédures sont faites pour WordPress mais je suis certain que vous trouverez l’équivalent pour d’autres plateformes.
Commençons donc par énumérer notre liste de points principaux:
Auditez de manière récurrente votre sécurité générale
Généralement lorsqu’on met en place un site WEB pour son client; on fait généralement attentions à un certain nombre d’éléments (SEO, sécurité, performance…). Cependant force est de constater que les problèmes arrivent très souvent avec le temps du au fait qu’on ne fait pas attention pendant plusieurs mois/année à l’instance et là c’est le drame. Une petite astuce à avoir est d’ajouter dans vos Marques-pages tous les tableaux de bord WordPress en gestion et de planifier une fois par mois les vérifications nécessaires.
Mettre à jour les Thèmes, Extensions, (Core et traductions)
Le premier vrai conseil d’ordre technique est assez simple, mais c’est généralement la cause de plus 80 % des problèmes; IL FAUT METTRE A JOUR VOTRE CMS! La grande force de WordPress vient principalement du fait que celui-ci est gratuit et open-source. Cela veut dire que toutes modifications sont disponibles à tout le monde qui le souhaite et qu’entre chaque version il est possible de voir rapidement les modifications apportées au code; en cas de correction de problème de sécurité la correction étant disponible il est aussi possible d’en déduire le problème initial.
Activez les mises à jour automatiques
Par défaut depuis les dernières versions de WordPress, le noyau se met automatiquement à jour.
Il est cependant possible d’activer cela via le fichier functions.php du thème en rajoutant ces lignes:
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
add_filter( 'auto_update_translation', '__return_false' );
Supprimez les Plugins et Thème non utilisés
Très souvent une des mauvaises habitudes prises vient du fait qu’on va tester un grand nombre de modules/thèmes, nous allons penser à les désactiver, mais pas forcément les supprimer! Au niveau des thèmes par exemple, il faut bien comprendre que vous ne pouvez avoir qu’une seule et unique apparence activé, il est donc plus que recommandé de supprimer TOUS les thèmes même ceux officiel à savoir Twenty Thirteen, Twenty Ten, Twenty Eleven, Twenty Twelve, Twenty Thirteen …
N’utilisez pas de modules/thème qui ne viennent pas de sources fiables.
Concernant les modules/thèmes, il est souvent très tentant d’utiliser des versions Nulled/pirates pour faire vos tests et vérifier que ceux-ci répondent à vos exigences. Dans la très grande majorité de cas, ces Free scripts intègrent volontairement des bout de codes malveillants/vulnérabilités/backdoor afin d’utiliser l’hébergement à des fins malveillant ! Méfiez-vous de ces « versions gratuites » qui n’incluent en plus aucun support/mise à jour…
Ne pas utiliser le préfixe de table par défaut
Généralement les hackeurs qui tentent de dérober des données, vont tenté d’exécuter des commandes SQL via des failles. Ceux-ci vont générer/envoyer des requêtes utilisant le nom de préfix de table par défaut qui est utilisée dans 75 % des instances WordPress. Il faut donc renommer le le préfix inscrit dans la base de données pour avoir quelque chose d’unique comme « wphblog_ ». Un article très intéressant est disponible ici: https://wpchannel.com/wordpress/tutoriels-wordpress/modifier-prefixe-base-donnees-wordpress-apres-installation/
Renouvelez vos clés secrètes présentent dans le fichier de configuration
Restons dans le fichier wp-config.php qui est lui aussi utilisé pour l’authentification, WordPress se base sur un système de chiffrement qui permet que le cookies généré ne soit pas facilement réutilisable. Par expérience j’ai déjà pu constater que certaines instances n’ont pas de valeurs définies ici, il est donc recommandé de modifier une fois par an les clés de sécurité en utilisant ce générateur en ligne: https://api.wordpress.org/secret-key/1.1/salt/
Utilisez des mots de passe sécuritaires et veillez à les changer fréquemment
Au niveau de l’authentification encore, il ne faut au grand jamais utiliser des identifiants par défaut tels que « admin », « test », « webmaster » ! Ceux-ci sont de plus très souvent couplés à des mots de passe ayant un niveau de sécurité très faible. Combien de fois au support nous n’avons pas reçu des identifiants tels que test/test ? Pensez aussi à utilise des mots de passe différents pour chaque service: FTP, MySQL, Messagerie, cPanel/World, … Veuillez à utiliser un générateur de mot de passe et stocker ceux-ci dans un gestionnaire de mot de passe LOCAL !
Passez votre site web en HTTPS pour protéger les pages d’authentifications
Restons encore sur l’authentification qui est un point très critique, pensez a sécuriser l’administration de votre WordPress en rajoutant cette ligne de code dans votre fichier de configuration wp-config.php
define('FORCE_SSL_ADMIN', true);
A ce moment là, dès que vous tenterez d’accéder à une page d’administration le CMS vous redirigera automatiquement vers le protocole SSL afin de chiffrer votre login et mot de passe afin que ceux-ci ne soient pas volés par une personne malintentionnée: Hackeur, FAI, Gouvernement, Administrateur réseau, ….
Bloquez les attaques Bruteforce sur les wp-login.php, xmlrpc.php et encore wp-admin/admin-ajax.php (2TFA)
WordPress étant utilisé à près de 25% des sites WEB, celui-ci est malheureusement victime de son succès ! Les attaques tentant de casser l’authentification sont très fréquentes, il existe donc certains outils/astuce afin de protéger votre section d’administration et n’oublions pas aussi le fait que WordPress intègre le protocole RPC permet aussi de s’identifier -> Pensez-vous donc à protéger aussi le xmlrpc.php !
Vérifiez que vous n’aillez plus d’Utilisateurs inactifs
Une erreur qui arrive souvent est le fait que lors de la mise en place du CMS, nous sommes très existé par le projet et nous souhaitons être aidé par d’autres personnes/collègue, instinctivement nous donnons un accès administrateur rapidement à celui-ci. Il arrive des fois que le lien avec cette personne cesse, à ce moment-là il faut bien vérifier à supprimer ou révoquer les permissions accordé à celui-ci afin de bloquer tous débordements.
Désactivez l’éditeur de code présent dans le tableau de bord
Dans le même ordre d’idée que le précédent point, il faut faire autant attention pour les attaques internes qu’externe ! Un point faible peut venir du fait que vous laissez l’éditeur WordPress accessible à votre client/utilisateur. Celui-ci avec un peu de patience pour assez rapidement modifier un fichier PHP et afficher les valeurs des defines tels que le DB_NAME, DB_USER, DB_PASSWORD ! Toujours dans le fichier wp-config.php, vous pouvez rajouter cette ligne afin de bloquer l’accès à cette fonctionnalité:
define( 'DISALLOW_FILE_EDIT', true );
Pensez à restreindre les privilèges de l’utilisateur MySQL
À savoir WordPress n’a besoin que des droits suivants: SELECT, INSERT, UPDATE et DELETE, il est donc inutile de donner tous les privilèges à savoir: CREATE TEMPORARY TABLES, EVENT, INDEX, LOCK TABLE, TRIGGER, ALTER/CREATE ROUTINE, CREATE VIEW, DROP, REFERENCES, SHOW VIEW ! Après si vous avez des modules assez spécifiques, il est possible que vous ailliez à lâcher un peu de leste.
Vérifiez que l’hébergeur procède bien à ces mises à jour !
C’est très bien de se préoccuper de la sécurité du CMS, maintenant il faut bien comprendre que vous pouvez mettre 5 serrures sur votre porte d’entrée, si votre porte de garage est ouverte cela ne servira pas à grand-chose ! C’est identiquement la même chose au niveau de la configuration du serveur, il faut veillez à se que celui-ci soit complètement à jour et qu’il a effectivement une bonne configuration. Un moyen assez simple pour vérifier cela est d’afficher un phpinfo(); et de comparer les versions de PHP sur https://php.net/ (en haut à droite) et Apache avec https://httpd.apache.org/download.cgi Ces systèmes étant mis à jour mensuellement, vous pourrez dès lors vous rendre compte si votre hébergeur est sérieux ou pas.
Pensez à vos sauvegardes externalisées
Nous ne le dirons jamais assez; ne vous fiez pas uniquement à une personne (à savoir les backups de votre hébergeur) celui-ci peut parfois faire défaut et vous risquez donc de vous retrouver sans aucun point de restaurations valables. C’est pour cela que les bonnes pratiques recommandent toujours la règle 3-2-1:
- 3 copies des données
- 2 supports différents
- 1 sauvegarde externalisé
J’espère que cet article vous a plu, si vous souhaitez avoir encore plus d’informations, je vous recommande ces articles:
- https://codex.wordpress.org/Hardening_WordPress
- https://dolys.fr/forums/topic/optimisation-securiser-wordpress/
- https://wpchannel.com/14-astuces-securiser-site-wordpress/
- https://dianebourque.com/4-extensions-essentielles-pour-la-securite-wordpress/
Pour une protection avancée (double authentification), nous recommandons de consulter l’article suivant : https://my.planethoster.net/knowledgebase/article/80/proteger-son-wordpress-avec-une-double-authentification-par-htaccess
Voir les commentaires
J'ajouterai "vérifiez que votre hébergeur propose un bon pare-feu" ;-)
Merci Quentin, article très utile.
De bons conseils qu'il convient de répéter, répéter, asséner... encore et encore :-)
Il est vrai que depuis 2,3 ans WordPress est proposé à toutes les sauces et donc cet engouement suscite de nombreux dérapages pour les novices qui tombent dans les pièges énoncés dans cet article ! Du coup il faut prendre le train en marche, cf. http://sitanim.fr/post/folie-wordpress
Ah sinon, une petite coquille : "nous sommes très existé par le projet"
Merciii ! Etant novice, cet article, j'en avais sérieusement besoin ! récemment j'ai vu des pages sur mon site et je ne sais même pas qui les a créés?
Super synthèse : merci d'y avoir joint une référence à mon application pratique sur l'Almanet doLys :)
Très bon article et très utile comme piqûre de rappel !
On ne le répétera jamais assez : garder son installation propre et à jour est déjà une bonne chose pour éviter les intrusions. Pour ma part, j'utilise Login Lockdown en complément de toutes mes autres sécurités, ainsi que WP Security Audit Log qui me permet de suivre en détail les IP qui tentent de s'introduire sur mes sites, puis de les bannir (à jamais).
Vous pouvez aussi masquer les notes de version de Wordpress. Dans le fichier function.php de votre thème, ajoutez ce bout de code : remove_action("wp_head", "wp_generator");
N'oubliez pas non plus de supprimer le fichier readme.html à la racine du serveur.
On peut aussi, via le fichier .htaccess, masquer certains fichiers, dont le .htaccess justement ou le wp-config.php :
# protect the htaccess file
order allow,deny
deny from all
# Protect the wp-config file
order allow,deny
deny from all
Enfin, pour limiter les attaques "brute force", il y a l'excellent plugin "Hide MyWP" de Codecanyon. Au lieu de verrouiller le site, il cache le fait que l’on utilise un WordPress et cela fait une grande différence. Il est possible de contrôler l’accès aux fichiers PHP, et de protéger un site de 95% des injections SQL et des attaques XSS. Les pirates et les robots ne peuvent pas reconnaître votre WordPress et de fait, ils vous ignorent !