à la une sécurité wp-config.php

La sécurité d’un site WordPress avec wp-config.php

Une erreur de configuration d’un site internet peut être catastrophique pour sa sécurité. Or, la configuration d’un site WordPress se définit dans le fichier wp-config.php.

Les paramètres de connexion à la Base de Données, les clés de sécurité sont autant d’informations contenues dans le fichier wp-config.php qui permettraient à un pirate de prendre le contrôle du site. Heureusement, quelques précautions permettent de protéger l’accès au fichier wp-config.php alors que quelques instructions ajoutées dans wp-config.php permettent d’améliorer la sécurité du site.

Ce tutoriel ne nécessite aucune connaissance en programmation.

Une petite histoire pour commencer

Il existe une espèce d’ours dont la particularité est de courir beaucoup plus vite que les humains. Un beau matin, deux chasseurs d’ours sortent de leur tente, et se trouvent nez à nez avec un de ces spécimens qui semble avoir mal dormi.
L’un se précipite sur ses chaussures et se met à courir. L’autre lui crie « que fais-tu, c’est inutile, il court plus vite que nous ». Et le premier lui répond « peut être, mais moi je vais courir plus vite que toi. ».

(Im)moralité : ce n’est pas parce qu’il n’y a pas de sécurité absolue, qu’une sécurité relative ne peut pas vous éviter de gros ennuis.

Important : avant de modifier wp-config.php, n’oubliez pas de faire une sauvegarde, par exemple avec FileZilla si votre site est hébergé.

Haut de page

Déplacer wp-config.php

Par défaut, le fichier « wp-config.php » se situe au niveau de la racine de l’installation du site, mais on peut le déplacer un niveau au dessus ce qui améliore la sécurité. En effet, les pirates conçoivent leurs attaques systématiques sur la base d’une installation standard. Ne plus être dans la configuration standard, c’est rendre inopérant ce type d’attaques.
Si le site est installé dans le répertoire racine du serveur web (souvent le répertoire « www »), en plaçant le fichier « wp-config.php » un cran au dessus, on rend impossible de le lire depuis internet :

Sécurité WP avec wp-config.php - déplacer le fichier config.php
Sécurité WP avec wp-config.php – déplacer le fichier config.php

WordPress recherche « wp-config.php » dans la racine de l’installation, et s’il ne le trouve pas, il recherche un niveau au dessus. C’est pourquoi, il suffit de déplacer le fichier « wp-config.php » pour que WordPress aille automatiquement le chercher au bon endroit.

Pour un serveur installé chez un hébergeur, il faut utiliser un outil comme FileZilla pour déplacer le fichier.

Avec FileZilla, vous pouvez effectuer un glisser/ déposer (cliquer sur « wp-config.php », déplacer en maintenant enfoncé le bouton gauche de la souris, puis relâcher quand vous survolez le répertoire « … ») :

Dans FileZilla, déplacer le fichier "wp-config.php" vers le répertoire "..."
Déplacer wp-config.php vers le répertoire parent
Haut de page

Les paramètres de sécurité contenus dans wp-config.php

Pour modifier le fichier « wp-config.php » utilisez un éditeur (par exemple Notepad++ qui est gratuit) et pas un traitement de texte comme word.
Le format du fichier est UTF8 sans BOM :

Sécurité WP avec config.php - encodage en UTF8 sans BOM

Lors de l’installation de WordPress, des informations de connexion à la Base de Données et des paramètres de sécurité sont copiés dans le fichier « wp-config.php ». Si un pirate obtient ces informations, il n’aura aucun mal à prendre le contrôle de votre base de données, donc de votre site.

Voici ces informations pour une installation en local :

// ** Réglages MySQL - Votre hébergeur doit vous fournir ces informations. ** //
/** Nom de la base de données de WordPress. */
define('DB_NAME', 'demo');

/** Utilisateur de la base de données MySQL. */
define('DB_USER', 'root');

/** Mot de passe de la base de données MySQL. */
define('DB_PASSWORD', '');

/** Adresse de l'hébergement MySQL. */
define('DB_HOST', 'localhost');

/** Jeu de caractères à utiliser par la base de données lors de la création des tables. */
define('DB_CHARSET', 'utf8mb4');

/** Type de collation de la base de données. 
  * N'y touchez que si vous savez ce que vous faites. 
  */
define('DB_COLLATE', '');

/**#@+
 * Clefs uniques d'authentification et salage.
 *
 * Remplacez les valeurs par défaut par des phrases uniques !
 * Vous pouvez générer des phrases aléatoires en utilisant 
 * {@link https://api.wordpress.org/secret-key/1.1/salt/ le service de clefs secrètes de WordPress.org}.
 * Vous pouvez modifier ces phrases à n'importe quel moment, afin d'invalider tous les cookies existants.
 * Cela forcera également tous les utilisateurs à se reconnecter.
 *
 * @since 2.6.0
 */
define('AUTH_KEY',         ']pRMDroB5nVp]eojUE}hchYAZdER-=&Prvld6}NUYLgrt !-pm0p(cIg$si>`6ch');
define('SECURE_AUTH_KEY',  'LJEG?_<&8D%([HK-JaV-{#9+ayEQ%.FrYAL}_*[w|PcLvG>%4y=S,Lp`a>7+0SIw');
define('LOGGED_IN_KEY',    'ImTeT`9A-qPT^+gZB_)y6lL[KbLsBW7[|S*!.FB5]kiP|pQmlhXYgY]DE.dDtmjn');
define('NONCE_KEY',        'MvR,=Vu9[-xH}6C@$fD$:l233-#siT&~y-TWyh)~hv^z!.8GME0.mj@U2%Jwb9rQ');
define('AUTH_SALT',        'FDm>=Ap,)x- RKo<+5=NkyrAH.pTPqg(/HRUTFp.qN=`SZCr-}Pkilj%QutAN-HN'); define('SECURE_AUTH_SALT', 'wYbo5F@.z!v||1a~qMvFyY+{WVe-PjqzMKl{%-U;I2KER&R>`UrBz8-BvSs MVtC');
define('LOGGED_IN_SALT',   'SiOsx2H-$EV-OiZ9|.W|js qgI>2+PU:;&^ZXR9f< 6+#~x#ZQ3O|:% 4`U.Q5XT');
define('NONCE_SALT',       'lZ5vQ#YjQby|)e^0Na~yx0gWsr8?6*CepaDh}xsVD8jKDoo${$RTpNcX)tdIz=oV');
Informations de sécurité copiées dans wp-config.php lors de l'installation

Les clés de sécurité (AUTH_KEY, SECURE_AUTH_KEY…) peuvent être modifiées à tout moment. La seule conséquence sera d’obliger les utilisateurs connectés à se reconnecter. Donc si votre site a été piraté pensez à modifier, ne serait-ce que d’un caractère, chacune de ces clés. Modifiez dans la foulée les mots de passe des utilisateurs.

Sécurité WP avec wp-config.php - déconnexion forcée par la modification des clés de sécurité
Sécurité WP avec wp-config.php – déconnexion forcée par la modification des clés de sécurité
Haut de page

Modifier le préfixe de table

Les tables WordPress ont un préfixe, « wp_ » par défaut.

Celui-ci fait partie des paramètres demandés lors de l’installation de WordPress :

Sécurité WP avec wp-config.php - choisir le préfixe de tables
Sécurité WP avec wp-config.php – choisir le préfixe de tables

Un pirate peut tenter d’injecter du code malicieux afin d’obtenir le contenu des tables ou même les détruire pour casser le site. Changer le préfixe, donc le nom des tables, c’est neutraliser ce code malicieux qui va tenter de s’exécuter pour des tables qui n’existent pas.

Pour modifier le préfixe de tables sur une installation existante, vous pouvez consulter le tutoriel WordPress et MySQL.

Voici un exemple de tables pour une installation mono site de WordPress pour lequel le préfixe est « demo_ » :

Sécurité WP avec wp-config.php - changer le préfixe de tables
Sécurité WP avec wp-config.php – changer le préfixe de tables

Dans ce cas, wp_config.php doit contenir l’instruction suivante :

$table_prefix  = ‘demo_’;

Haut de page

Connecter l’administration en SSL

Il est possible d’imposer que toute connexion et dialogue avec l’administration d’un site WordPress se fasse en crypté.

Pour cela, il faut remplir deux conditions :

  • installer un certificat, comme pour toute connexion SSL,
  • ajouter le code suivant dans le fichier wp-config.php

     define(‘FORCE_SSL_ADMIN’, true);

Vous trouverez les précisions dans le tutoriel : Sécuriser l’administration.

WordPress en https

Haut de page

Retirer l’édition en ligne du code

Avec l’installation standard de WordPress, il est possible de modifier les fichiers des thèmes et des extensions (plugins) depuis l’administration du site :

Sécurité WP avec wp-config.php - éditer le code des thèmes
Sécurité WP avec wp-config.php – éditer le code des thèmes

 

Sécurité WP avec wp-config.php - éditer le code des extensions
Sécurité WP avec wp-config.php – éditer le code des extensions

 

Sécurité WP avec wp-config.php - éditer le code d'une extension
Sécurité WP avec wp-config.php – éditer le code d’une extension

Outre que ce type d’édition présente un risque très important de casser le site, notamment car on ne peut pas annuler automatiquement les dernières modifications, il y a toujours le risque qu’un pirate puisse y accéder et ainsi insérer le code qu’il souhaite.

Pour la sécurité d’un site, il est fortement conseillé d’empêcher l’édition de code en ligne en insérant le code suivant dans le fichier wp-config.php :

define (‘DISALLOW_FILE_EDIT’, TRUE);

À partir de ce moment, l’option d’édition de code n’est plus disponible dans l’administration :

Sécurité WP avec wp-config.php - édition de code retirée de l'administration
Sécurité WP avec wp-config.php – édition de code retirée de l’administration

La bonne pratique consiste à disposer d’une installation de test en local (sur votre ordinateur), à mettre au point les évolutions des extensions (plugins) et des thèmes, puis d’utiliser un client FTP comme FileZilla pour transférer les fichiers modifiés sur le serveur qui héberge le site.

Haut de page

Déplacer et/ou renommer le répertoire wp-content

Déplacer et/ou renommer le répertoire « wp-content » permet de contrer certaines tentatives d’exécution de code malicieux.
Les pirates s’en prennent généralement à toutes les adresses internet (« url ») qu’ils trouvent, et supposent que les installations WordPress qu’ils rencontrent sont standard .
Changer « wp-content » peut rendre inopérant leurs tentatives d’intrusion car le code malveillant va pointer sur des adresses qui n’existent plus.
Ainsi, s’ils tentent d’exécuter un fichier d’extension (plugin) pour en exploiter une faille, ils vont chercher à l’exécuter à une adresse du type « monsite.fr/wp-content/plugins/lacible.php ». Si le répertoire wp-content a été déplacé et/ou renommé, l’adresse du fichier cible devient inconnue.

Le déplacement du répertoire « wp-content » d’un site déjà en place est délicat. Cela fera l’objet d’un tutoriel dédié. En revanche, le modifier lors de l’installation d’un nouveau site présente moins de difficultés et de risques.

Une fois la procédure d’installation WordPress standard terminée, dupliquer le répertoire wp-content à sa nouvelle adresse, par exemple : « nouveau/contenu ».

Sécurité WP avec wp-config.php - dupliquer wp-content
Sécurité WP avec wp-config.php – dupliquer wp-content

Insérer les deux instructions suivantes dans wp-config.php :

define( ‘WP_CONTENT_DIR’, $_SERVER[‘DOCUMENT_ROOT’] . ‘/nouveau/contenu’ );

define( ‘WP_CONTENT_URL’, ‘http://localhost/demo/nouveau/contenu’);

Si le site ne s’affiche plus, le tutoriel dédié au déplacement de wp-content vous aidera à détecter et corriger le problème.

Vous pouvez vérifier que le déplacement a bien été pris en compte en affichant le code HTML de la page (clic droit ou « CTRL U » et recherche) :

Sécurité WP avec wp-config.php - vérification du déplacement des extensions et thèmes
Sécurité WP avec wp-config.php – vérification du déplacement des extensions et thèmes

Il est aussi possible de ne déplacer que le répertoire des extensions (plugins) et / ou des thèmes et / ou des téléchargements (uploads).

Haut de page

Une réflexion sur « La sécurité d’un site WordPress avec wp-config.php »

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.