19 points pour sécuriser WordPress !

CMS parmi d’autres, WordPress permet comme les autres de créer et gérer facilement un site web, de le personnaliser à l’extrême, d’y ajouter des tonnes de fonctionnalités.

L’objet de l’article n’est pas de faire la retape de WordPress mais de se concentrer sur les meilleurs moyens pour rendre son installation la plus secure possible.

Très utile pour vérifier l’efficacité des mesures ci-dessous, quelques sites « d ‘audit » automatiques de votre propre CMS à la seule condition que vous en soyez le gestionnaire, propriétaire ou que vous ayez toutes les autorisations nécessaires (opérateur, hébergeur,…) avant de lancer ces tests.

Effectuer un scan de vos entêtes HTTP et obtenir une note (de A+ à R). L’outil sous licence CC-BY-SA 4 sponsorisé par Sophos.

https://securityheaders.com/

Effectuer un scan gratuit dédié à WP.

https://wpscans.com/

Effectuer un scan gratuit de WP avec un faible impact sur la stabilité de votre site

https://hackertarget.com/wordpress-security-scan/

plus https://firstsiteguide.com/tools/free-fsg/wordpress-security-online-scanner/

….

 

 

 

Toutes les mesures proposées ci-dessous visent à renforcer le niveau de sécurité de WordPress mais peuvent aussi provoquer un crash de votre CMS pour plein de raisons : ne les appliquez que UNE  par UNE , en vous assurant de bien avoir sauvegardé au préalable votre CMS (fichiers + base) avant chaque opération.

Si vous ne savez pas restaurer votre CMS,  ou si votre CMS est en production/critique, abandonnez la lecture de cet article.

1 – règles de bon sens

Avant d’aller plus loin dans les aspects techniques, quelques règles essentielles lors de l’installation du CMS

1.1 Mises à jour AUTO WP

Vérifier que son WordPress soit mis à jour automatiquement : depuis la version 3.7, c’est automatique pour les versions mineures mais vous devrez rester vigilant pour appliquer les mises à jour majeures.

Si les mises à jour sont configurées en manuel, vous recevrez un email prévenant de la mise à disposition de nouvelles versions.

Le paramétrage précis des mises à jour WP se fait dans le fichier wp-config.php, en modifiant sur la valeur de la constante  suivante : 

define( 'WP_AUTO_UPDATE_CORE', true);

Si true, alors toutes les mises à jour sont appliquées automatiquement

Si minor, alors seules les mises à jour mineures sont appliquées

Si false, aucune mise à jour… donc fortement déconseillé (sauf incompatibilité avec un dev spécifique ou un plugin).

 

1.2 Plugins et Thèmes

Limitez au maximum l’utilisation des Plugins ou des Thèmes sans en justifiant réellement le besoin ou en maitriser la source ou sa conception. Les Plugin notamment sont régulièrement des sources d’introduction de backdoor, de fuite de données, de contournement d’authentification, de collecte d’information personnelle des visiteurs,…

Quelques soient le nombre de plugin ou thèmes installés (le moins possible de préférence), pensez à en faire la mise à jour régulièrement.

 

1.3 HTTPS

Là aussi, c’est sans doute redondant de dire pourquoi :

  • votre site sera mieux indexé dans les moteurs de recherche
  • tout le trafic réseau et les données entre votre site et le navigateur web seront chiffrées, y compris les authentifications (notamment lorsque vous vous connectez à l’interface d’administration).

La mise en œuvre d’un certificat TLS/SSL ne relève pas de cet article, mais le meilleur conseil serait d’utiliser Let’s Encrypt , gratuit, automatique et ouvert !

Une fois le certificat ajouté, pensez à préciser la nouvelle URL dans WordPress :

Menu Réglages / Général :

 

1.4 Inscription automatique des visiteurs

Si cette fonction ne présente pas d’intérêt pour votre site web (l’auto inscription des visiteurs), désactivez-là !

Menu Réglages / Général :

 

1.5 Mise à jour des articles par email

Si cette fonctionnalité n’est pas utilisée (et évitez), assurez-vous qu’elle ne soit pas exploitable.

Menu Réglages / Ecriture

 

1.6 Mots  de passe de BDD et d’administration

Là aussi c’est élémentaire, mais prévoyez des mots de passe longs et complexes (8 caractères minimum, avec un mélange de chiffres/lettres/majuscules/minuscules/caractères exotiques,…).

1.7 Renommer le compte admin

Par défaut, vous utiliserez le compte ADMIN créé avec l’installation de WP ; autant le changer par un compte qui vous soit propre et inconnu.

Il faut :

  1. créer un nouvel utilisateur (menu utilisateurs/Ajouter)
  2. ajouter à cet utilisateur avec un rôle Administrateur (en renseignant @mail, mot  de passe complexe,…)
  3. connectez-vous avec ce nouveau compte et cela fonctionne passez à l’étape 4
  4. supprimer le compte nommé ADMIN

 

2 – Configuration de WordPress

Toutes les recommandations ci-dessous s’appliqueront au fichier wp-config.php de votre site web.

2.1 Editeur de thème

Une fonction avancée de WP permet d’éditeur le code du thème installé, dans le principe cela peut être confortable pour le personnaliser, voire y ajouter des fonctions…. mais c’est aussi le meilleur moyen pour qu’une personne malveillante y copie/colle du code mailveillant (trojan, cryptominage,….).

Dans si ce n’est pas utile , désactivez cette fonction dans le fichier wp-config.php an ajoutant les 2 lignes

/* désactiver l'édition de fichiers PHP dans l'editeur WP */
define(‘DISALLOW_FILE_EDIT’,true);

2.2 Désactiver les messages d’erreur

Les rapports ou messages d’erreur WP qui peuvent s’afficher pourraient fournir des informations sur la configuration de votre site web (comme le chemin). Autant les désactiver en ajoutant les 3 lignes :

/* désactiver les messages d'erreurs */
error_reporting(0);
@ini_set(‘display_errors’, 0);

2.3 ajouter des clefs de chiffrement des mots de passe

Par défaut, vous devriez avoir dans votre fichier wp-config.php les lignes suivantes :

define('AUTH_KEY', 'xxxxxxxxxxxxxx');
define('SECURE_AUTH_KEY', 'xxxxxxxxxxxxxx');
define('LOGGED_IN_KEY', 'xxxxxxxxxxxxxx);
define('NONCE_KEY', 'xxxxxxxxxxxxxx');
define('AUTH_SALT', 'xxxxxxxxxxxxxx');
define('SECURE_AUTH_SALT', 'xxxxxxxxxxxxxx');
define('LOGGED_IN_SALT', 'xxxxxxxxxxxxxx');
define('NONCE_SALT', 'xxxxxxxxxxxxxx');

il est recommandé de changer ces clés/phrases installées par défaut en utilisant le lien https://api.wordpress.org/secret-key/1.1/salt/

A chaque connexion sur cette url, vous aurez une génération auto de nouvelles clés à copier/coller dans votre fichier initial :

define('AUTH_KEY',         '~)rD^kdp<)HqoCLfQu3#n|;9}7TKPmc0oJ?9CVhN-K$F?>a{bVTSMrJq<*Z=>+N8');
define('SECURE_AUTH_KEY',  'lpY(J;9j6EQe`GCYLT|u?V}$-D5vd-|n%!h9Yh12&#%1/JqD?kWCa Y/u2Syd )<');
define('LOGGED_IN_KEY',    'X[h>%!b;kEKj:=aYQ&V_)`5;]E.C6`r+(,)fAA=nzAM/?(44--5E_+`LtO<D?Bhn');
define('NONCE_KEY',        '3hCDkB~T0E9e.vY(F(`XG^m&vSSJw}c9VF10vnb/1~)=@n^I-P0xPaeJp}DnRBfi');
define('AUTH_SALT',        'L]/}[e[19r}7]nB2UZ-3.<-G_n[*%|^hHBf~^Fx+BzQz3+H#p}gx>T0Gw4?tt1M@');
define('SECURE_AUTH_SALT', 'K]L|mcc38&RCw[^[2SylmQ>Z&`~|Rv_d&hW$<+]mtI+=J_Z[@GP_!!J+Nv1=99|x');
define('LOGGED_IN_SALT',   'G&Be{v`b6Gb*+2GrZ_6Wiy ?&o>gU,.}X+XQb2-{qrTR64pjHAX551(}[R`{nG |');
define('NONCE_SALT',       'Y3V/f4AIe/a}IHA32b-rW8N^QZu(g-)qvc3TB-`d#pS4p@Hm#Dq&8EGF!IM-6L%A');

3 – configuration du .htaccess (pour WP)

Toutes les recommandations ci-dessous s’appliqueront au fichier .htaccess de votre site web.

3.1 Blocage de l’accès au fichier wp-config.php

Ce fichier est central dans la configuration de WP, autant le protéger, notamment en ajoutant dans votre fichier .HTACCESS à la racine de votre site web, la directive suivante :

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

3.2 Protection contre le XSS / ClickJacking

Le Click Jacking consiste pour un utilsateur malveillant de superposer par exemple un second bouton sur votre propre bouton de formulaire . Autrement dit, la protection consiste à interdire toute inclusion de page issue d’un autre domaine que le domaine courant (référence : https://www.lexsi.com/securityhub/en-tetes-et-vous-comment-ajouter-de-la-protection-dans-ses-echanges/).

Ajouter la ligne  ci-dessous pour s’en protéger :

Header set X-Frame-Options SAMEORIGIN

3.3 Protection contre le XSS / Drive by Download

Cette fois, il s’agit de forcer le type MIME envers le navigateur pour éviter toute mauvaise interprétation du type de données envoyée.

Il faut ajouter la directive :

Header always set X-Content-Type-Options "nosniff"

3.4 Mise en œuvre de HSTS

HSTS est l’acronyme de HTTP Strict Transport Security, spécification de HTTPS qui renforce la communication entre le serveur et le navigateur (sur la politique de sécurité) avant de commencer les échanges en HTTPS.

Une vaste campagne de mise à jour des navigateurs Web consiste à vérifier que HSTS soit activé sur le serveur Web avant d’en autoriser l’accès (ou sinon d’émettre un warning). Par ailleurs, les sites HSTS peuvent aussi bénéficier d’un meilleur référencement dans certains moteurs de recherche.

Il faut ajouter cette ligne :

Header set strict-transport-security "max-age=31536000; includeSubDomains"

3.5 Désactiver la version PHP

Afficher la version du moteur PHP de votre CMS peut déjà renseigner sur les vulnérabilités existantes liées à votre version PHP, autant la masquer.

Il faut ajouter cette ligne :

/* masquer la version PHP */
expose_php = Off

 

3.6 interdire la navigation dans les répertoires de votre site

Cette option essentielle impose de naviguer dans votre site web par les pages et non en explorant le contenu des répertoires (à l’image de l’explorateur Windows ou d’une liste type FTP).

/* Interdire la navigation */
Options All -Indexes

4 Compléments

4.1 Plugin Utile

Un plugin opensource peut être utile à la protection de l’authentification : Login LockDown https://wordpress.org/plugins/login-lockdown/

Ce plugin vous permettra de limiter le nombre de tentatives de connexions avec un mauvais mot de passe, de le verrouiller automatiquement quelques minutes, et de masquer les erreurs si le bon login est renseigné avec le mauvais mot de passe.

 

4.2  Version WP

Il peut être utile de masquer le numéro de version WP mentionné dans les variables meta renvoyées au navigateur web. Il faut ajouter au fichier functions.php les 2 lignes suivantes :

/* supprimer la version WP*/

 remove_action('wp_head', 'wp_generator');

 

4.3 Sauvegarde WordPress

La sauvegarde automatique de WordPress passe inévitablement par un plugin (sauf si vous avez la main sur les tâches CRON…) : BAckupWordPress est un plugin facile , intuitif qui vous créera un backup par jour, avec un mail de notification pour chaque backup.

Pensez-juste à sauvegarder le fichier de backup généré quotidiennement vers un autre emplacement (en local).

Ponctuellement, avant de grosses mises à jour ou modifications WP : réalisez aussi une sauvegarde via FTP ou SCP de vos fichiers ainsi qu’un DUMP MySQL.

 

5 Conclusion

Refaites les deux premiers test/scan/audit proposés en début d’article, et vous devriez obtenir des résultats corrects !

 

Ajouter : sauvegarde, page légale,…

Laisser un commentaire

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