a la une déplacer wp-config.php

Déplacer wp-content, plugins et uploads

« wp-content », « plugins » et « uploads » sont des  sous-répertoires de l’installation d’un site WordPress. Les pirates le savent, et trouvent ainsi facilement l’adresse des extensions et des thèmes lorsqu’ils tentent d’exploiter une faille de sécurité.
WordPress permet de les déplacer et / ou les renommer. À partir de ce moment, toutes les attaques basées sur l’installation standard tapent dans le vide.

Il faut savoir que n’importe quel site est exposé à ce type d’attaques, même pour un site avec une faible visibilité.

Ce tutoriel nécessite un minimum d’expérience en développement informatique.

Important : avant de modifier le fichier « wp-config.php » d’un site hébergé, n’oubliez pas de faire une sauvegarde, par exemple avec FileZilla .

Déplacer le répertoire « wp-content »

Attention : cette opération est délicate et peut entraîner des dysfonctionnements.
Ne tentez cette opération sur un site existant que si vous disposez des connaissances informatiques suffisantes pour comprendre ce que vous faites.

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. Déplacer et / ou renommer le répertoire « wp-content » permet de rendre inopérant ces tentatives d’intrusion.

En revanche, une attaque ciblée sur un site précis ne sera pas bloquée car il suffit de faire un clic droit sur une page du site affichée par un navigateur, puis de sélectionner l’option d’affichage du code source, pour trouver le nom du répertoire qui contient thèmes, extensions et média :

Déplacer wp-content - demander l'affichage du source
Déplacer wp-content – demander l’affichage du source
Déplacer wp-content - recherche du fichier "content" dans le source HTML
Déplacer wp-content – recherche du fichier « content » dans le source HTML

Pour déplacer et / ou renommer le répertoire « wp-content » il faut suivre les étapes suivantes :

  1. préparer le déplacement,
  2. modifier deux constantes dans « wp-config.php »,
  3. pour un site existant, modifier tous les liens existants dans les articles et pages qui dirigent vers  « wp-content »,
  4. éventuellement, mettre à jour le fichier htaccess.

Nous allons déplacer et renommer le répertoire « wp-content » vers « nouveau/contenu».

Préparer le déplacement

Pour éviter l’interruption de service sur un  site public, avant toute autre chose nous allons :

  • exporter la Base de Données pour pouvoir la réinstaller rapidement en cas de mauvaise manipulation;
  • copier le contenu du répertoire wp-content dans le répertoire cible.

La copie du répertoire avec un outil comme FileZilla doit se faire en deux temps : recopier en local (sur son ordinateur) puis recopier dans le répertoire cible :

  1. télécharger tout le contenu de « wp-content » depuis le site internet vers son ordinateur
Déplacer wp-content - télécharger wp-content
Déplacer wp-content – télécharger wp-content
  1. créer le répertoire cible sur le serveur distant
Déplacer wp-content - créer répertoire remplaçant wp-content
Déplacer wp-content – créer répertoire remplaçant wp-content
  1. envoyer les fichiers transférés en local vers le serveur distant
Déplacer wp-content - envoyer le contenu de wp-content
Déplacer wp-content – envoyer le contenu de wp-content

Modifier les constantes d’adressage dans wp-config.php

Modifier l’adressage depuis le serveur

La première constante (WP_CONTENT_DIR) permet de modifier le chemin d’accès au répertoire depuis le serveur. Insérer le code suivant dans wp-config.php :

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

Attention : dans certains cas, « $_SERVER[‘DOCUMENT_ROOT’] » ne contient pas le chemin racine complet. C’est par exemple le cas dans mon environnement de test où j’ai dû modifier la valeur de la constante :

define( 'WP_CONTENT_DIR', $_SERVER['DOCUMENT_ROOT'] . 'demo/nouveau/contenu' );

On remarquera que, s’il ne faut jamais de slash à la fin, il en faut parfois au début, mais pas toujours.

Avant de modifier le fichier wp-config.php d’un site public, il est préférable de vérifier la valeur de « DOCUMENT_ROOT », car si la valeur n’est pas celle attendue, le site va être cassé.

Pour trouver l’adresse interne du site, voici deux astuces (choisir l’une ou l’autre) :

  • Il est possible d’insérer l’instruction var_dump ($_SERVER[‘DOCUMENT_ROOT’]); dans le fichier functions.php. La valeur doit s’afficher en haut de page.
    Une fois visualisée,  retirer l’instruction dans functions.php. Les visiteurs du site peuvent se  demander à quoi correspond cette étrange valeur qui s’affiche, mais cela a moins de conséquences que de casser son site le temps de trouver la véritable valeur de  DOCUMENT_ROOT.

    Déplacer wp-content - affichage DOCUMENT_ROOT sur le site
    Déplacer wp-content – affichage DOCUMENT_ROOT sur le site
  • Si vous maîtrisez la programmation php, vous pouvez insérer :

    dans le fichier config.php,

define('WP_DEBUG_LOG', true);

dans le fichier functions.php.

error_log($_SERVER['DOCUMENT_ROOT']);

La valeur de DOCUMENT_ROOT sera  inscrite dans un fichier debug.log situé dans le répertoire wp-content :

Déplacer wp-content - afficher debug.log pour connaître DOCUMENT_ROOT
Déplacer wp-content – afficher debug.log pour connaître DOCUMENT_ROOT

Constatant que DOCUMENT_ROOT ne correspond pas à l’adresse du site qui est « c:/wamp/www/demo/ », nous ajoutons « demo/ » à la valeur de la constante d’adressage.

Modifier l’adressage via internet

La deuxième constante (WP_CONTENT_URL) permet de modifier le chemin d’accès au répertoire via internet. Insérer le code suivant dans wp-config.php :

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

L’adresse internet du site est connue, il suffit donc d’ajouter l’enchaînement des sous-répertoires où se situera le remplacement de wp-content.

À partir de ce moment, le site est accessible avec un répertoire « wp-content « déplacé. On peut le vérifier en affichant le code source (cliquer droit après avoir affiché une page du site) :

Déplacer wp-content - afficher le code source
Déplacer wp-content – afficher le code source

 

Déplacer wp-content - adresses des thèmes et plugins dans remplaçant de wp-content
Déplacer wp-content – adresses des thèmes et plugins dans remplaçant de wp-content

Modifier les liens vers les images

En regardant le codes source, on constate que les liens vers les images contenues dans les articles pointent toujours vers « wp-content » :

Déplacer wp-content - liens vers wp-content/uploads
Déplacer wp-content – liens vers wp-content/uploads

Il faut donc se connecter à phpMyAdmin pour modifier le contenu des articles directement dans la base de données.

Rappel : par prudence, vous avez fait un export de la Base de Données lors de l’étape de préparation. En cas d’erreur de manipulation, cela vous permettra de remettre la BdD à l’état initial par un simple import .
Si vous n’avez pas l’habitude de ce type de manipulation, je vous invite à lire d’abord le tutoriel Modifier le contenu des tables WordPress.

Sélectionner la Base de Données, cliquer sur l’onglet SQL et saisir la requête suivante (remplacer ‘wp_’ par le préfixe de tables de votre site et ‘/nouveau/contenu/’ par le répertoire remplaçant /wp-content/) :

UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`, "localhost/demo/wp-content/", "localhost/demo/nouveau/contenu/");
Déplacer wp-content - modifier adresse des images
Déplacer wp-content – modifier adresse des images

Il est conseillé de ne pas restreindre la requête à « wp-content » mais d’inclure devant l’adresse du site. Cela peut éviter de casser des liens externes, par exemple vers une image d’un autre site WordPress.

Cliquer sur Exécuter en bas de page :

Déplacer wp-content - exécuter requête SQL
Déplacer wp-content – exécuter requête SQL

On peut ensuite vérifier en affichant le source des pages que les images ne pointent plus vers « /wp-content/uploads/ » mais vers « /nouveau/contenu/uploads/ « :

Déplacer wp-content - nouvelle adresse des images
Déplacer wp-content – nouvelle adresse des images

Vérifier le source

Afficher le source de quelques articles et pages et rechercher « wp-content ». Il ne devrait plus y avoir de lien vers une adresse contenant « wp-content ».

S’il en existe encore, vérifiez que l’adressage corresponde bien à votre site, ce qui n’est pas le cas dans le cas suivant ou il ne faut surtout rien modifier :

Déplacer wp-content - lien avec wp-content vers un site externe
Déplacer wp-content – lien avec wp-content vers un site externe

Vérifier le paramétrage des extensions (plugins) et thèmes

Le paramétrage des extensions et thèmes est mis en place lors de la première activation. Il peut donc rester des valeurs non mises à jour par la seule déclaration du changement d’adressage dans wp-config.php :

Déplacer wp-content - paramètre d'extension non mis à jour
Déplacer wp-content – paramètre d’extension non mis à jour

Désactiver puis réactiver l’extension peut parfois suffire à résoudre le problème.

Si ce n’est pas suffisant, supprimer l’extension ou le thème et relancer l’installation (auparavant, noter les éventuels clés ou numéros de licences qui peuvent être redemandés lors de l’installation).

Si le fait de réinstaller complètement une extension ou un thème ne suffit pas à corriger les problèmes, le mieux est d’en changer : le programmeur n’a pas suivi les bonnes pratiques et vous vous exposez à des soucis lors d’une mise à jour de WordPress.

Retirer wp-content

Pour se faire, plutôt que de le détruire, commençons par le renommer le temps de complètement vérifier que tout fonctionne correctement :

Déplacer wp-content - renommer wp-content
Déplacer wp-content – renommer wp-content

En cas de problème, on le renomme « wp-content » le temps de corriger.

Pour vérifier les liens brisés, vous pouvez utiliser une extension comme broken link checker .

Attention : broken link checker peut signaler des erreurs.. qui n’en sont pas.
Par exemple, si on affiche le source des pages signalées ci-dessous, on constate que « wp-content » a bien été remplacé contrairement à ce que broken link checker indique :

Déplacer wp-content - liens signalés cassés
Déplacer wp-content – liens signalés cassés

Cela tient à l’utilisation d’un cache qui fait que l’extension n’affiche pas la page générée à la demande, mais une version précédente sauvegardée. C’est pourquoi il est préférable d’attendre au moins une semaine avant de supprimer le répertoire wp-content, le temps que les caches soient vidés.

Dans le cas de l’extension « broken link checker », il est possible de vider le cache en allant dans ses options avancées :

Déplacer wp-content - options de broken link checker
Déplacer wp-content – options de broken link checker

et de demander la revérification de toutes les pages :

Déplacer wp-content - forcer vérification de broken link checker
Déplacer wp-content – forcer vérification de broken link checker

Vérifier les liens avec Xenu

Xenu est un outil à télécharger et installer sur son ordinateur qui peut analyser tout un site à la recherche de liens brisés :

Déplacer wp-content - vérifier les liens brisés avec Xenu
Déplacer wp-content – vérifier les liens brisés avec Xenu
Déplacer wp-content - Xenu, demander les liens brisés
Déplacer wp-content – Xenu, demander les liens brisés
Déplacer wp-content - Xenu, liste des liens brisés
Déplacer wp-content – Xenu, liste des liens brisés

Une fois assuré que tout fonctionne correctement, mieux vaut supprimer « wp-content » et tout son contenu.
Laisser wp-content en place, c’est conserver sur son site des fichiers de programmes appartenant à des extensions et des thèmes qui ne sont plus mis à jour (les mises à jour se font à la nouvelle adresse de « wp-content »). De ce fait, les failles de sécurité n’y sont plus corrigées. Le bonheur pour un pirate !

Modifier (éventuellement) htaccess

Le fichier .htaccess est un fichier du serveur Apache qui est décrit dans le tutoriel : Sécuriser WordPress avec .htaccess,.

Des instructions peuvent avoir été insérées dans .htaccess qui sont relatives à des adresses contenant « wp-content ». Ces instructions doivent être mises à jour pour tenir compte du remplacement du répertoire wp-content.

Il faut vérifier tous les fichiers .htaccess relatifs au site :

  • celui situé à la racine du site,
  • éventuellement celui situé dans wp-content,
  • éventuellement ceux situés dans les sous-répertoires de wp-content.
Haut de page

Déplacer le répertoire « plugins »

Le répertoire « plugins » (situé dans l’installation standard à une adresse du type « monsite.fr/wp-content/plugins ») contient les fichiers de programmes des extensions (plugins). Nombre de tentatives d’intrusion sont basées sur la recherche systématique de failles dans les extensions. En déplaçant le répertoire « plugins », on neutralise ces tentatives.

Il est possible de le déplacer et/ou de le renommer de la même façon que pour le répertoire wp-content, en suivant les mêmes étapes.

Préparer le déplacement,

Il n’est pas nécessaire de sauvegarder la Base de Données (même si ça ne fait pas de mal) car la Base de Données ne sera pas modifiée.
Copier le répertoire « plugins » dans le répertoire cible, par exemple /nouveau/extensions/ :

Déplacer le répertoire plugins - déplacer les extensions
Déplacer le répertoire plugins – déplacer les extensions

Modifier des constantes dans « wp-config.php »,

Modifier l’adressage depuis le serveur

La première constante (WP_PLUGIN_DIR) permet de modifier le chemin d’accès au répertoire depuis le serveur. Insérer le code suivant dans wp-config.php :

 define( 'WP_PLUGIN_DIR', dirname(__FILE__) . '/nouveau/extensions' );

Pour trouver l’adresse interne au serveur nous utilisons l’expression php « dirname (__FILE__) » qui donne l’adresse du répertoire courant (il s’agit d’une alternative à l’utilisation de « $_SERVER[‘DOCUMENT_ROOT’] » utilisé pour déplacer le répertoire wp-content).
Dans notre exemple, « dirname (__FILE__) » contient l’adresse du répertoire qui contient le fichier wp-config.php.

Pour être sûr d’avoir trouvé la bonne adresse,  utilisez les astuces présentées pour le déplacement du répertoire wp-content.

Modifier l’adressage via internet

La deuxième constante (WP_PLUGIN_URL) permet de modifier le chemin d’accès au répertoire via internet. Insérer le code suivant dans wp-config.php :

define( 'WP_PLUGIN_URL', 'http://localhost/demo/nouveau/extensions' );

Attention : seul le répertoire « plugins » est modifié, pas le répertoire « mu-plugins ».

En cas d’incompatibilité

Le Codex signale :

Si vous rencontrez des problèmes de compatibilité avec des extensions, paramétrez PLUGINDIR vers le chemin local complet de ce répertoire (pas de slash à la fin), comme par exemple :

define( 'PLUGINDIR', $_SERVER['DOCUMENT_ROOT'] . '/nouveau/extensions' );

Après avoir vérifié que les extensions fonctionnent correctement, vous pouvez renommer l’ancien fichier plugins (par exemple « pluginsxxx »). Désactivez puis activez des extensions, installez en de nouvelles.
Si tout se passe bien, vous pouvez retirer l’ancien répertoire « plugins ».

Haut de page

Il n’est pas possible de déplacer le répertoire « themes »

Il n’est pas possible de déplacer le répertoire « theme » car son adresse est toujours relative au répertoire « wp-content » (voir le codex anglais).

Haut de page

Déplacer le répertoire « uploads »

Le répertoire « uploads » (situé dans l’installation standard à une adresse du type « monsite.fr/wp-content/uploads) » , contient les fichiers de médias (images, vidéos…). Il est une cible pour l’inclusion de fichiers malveillants. Le déplacer et/ou le renommer permet de rendre plus compliqué ce type d’attaques.

Il est possible de le déplacer et/ou de le renommer de la même façon que pour le répertoire wp-content, en suivant les mêmes étapes.

Préparer le déplacement,

  • Exporter la Base de Données pour pouvoir la réinstaller rapidement en cas de mauvaise manipulation;
  • Copier le répertoire « uploads » dans le répertoire cible, par exemple /nouveau/chargements/ :
Déplacer le répertoire uploads- copier uploads
Déplacer le répertoire uploads- copier uploads

Modifier la constante « UPLOADS » dans « wp-config.php »,

La constante « UPLOADS » permet de modifier le chemin d’accès au répertoire depuis le serveur. Insérer le code suivant dans wp-config.php :

define( 'UPLOADS', 'nouveau/chargements' );

Il s’agit d’une adresse relative par rapport à la racine du site. Il ne faut pas mettre de caractère « / » en début d’adresse du sous-répertoire.

Cette modification est prise en compte pour la gestion des médias dans la bibliothèque de médias.
Elle sera prise en compte pour les nouveaux chargements de médias .
En revanche, les liens vers les médias intégrés dans les articles continuent à pointer vers l’ancien répertoire « uploads ».

Modifier les liens vers les images

En regardant le codes source, on constate que les liens vers les images contenues dans les articles pointent toujours vers wp-content :

Déplacer le répertoire uploads- liens vers wp-content/uploads
Déplacer le répertoire uploads- liens vers wp-content/uploads

Il faut donc se connecter à phpMyAdmin pour modifier le contenu des articles directement dans la base de données.

Rappel : par prudence, vous avez fait un export de la Base de Données lors de l’étape de préparation. En cas d’erreur de manipulation, cela vous permettra de remettre la BdD à l’état initial par un simple import .
Si vous n’avez pas l’habitude de ce type de manipulation, je vous invite à lire d’abord le tutoriel Modifier le contenu des tables WordPress.

Sélectionner la Base de Données, cliquer sur l’onglet SQL et saisir la requête suivante (remplacer ‘wp_’ par le préfixe de tables de votre site et ‘/nouveau/chargements/’ par le répertoire remplaçant /wp-content/uploads/) :

UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`, "localhost/demo/wp-content/uploads/", "localhost/demo/nouveau/chargements/");

Il est conseillé de ne pas restreindre la requête à « wp-content » mais d’inclure devant l’adresse du site. Cela peut éviter de casser des liens externes, par exemple vers une image d’un autre site WordPress.

Déplacer le répertoire uploads- requête sur les images pour changement uploads
Déplacer le répertoire uploads- requête sur les images pour changement uploads

Cliquer sur Exécuter en bas de page :

Déplacer le répertoire uploads- exécuter requête SQL
Déplacer le répertoire uploads- exécuter requête SQL

On peut ensuite vérifier en affichant le source des pages que les images ne pointent plus vers /wp-content/uploads/ mais vers /nouveau/chargements/ :

Déplacer le répertoire uploads- adresses images modifiée
Déplacer le répertoire uploads- adresses images modifiée

Après avoir vérifié que les images se chargent correctement, vous pouvez renommer l’ancien répertoire « uploads » (par exemple « uploads_aaaa »). Vérifiez que les images se chargent toujours correctement.

Si tout se passe bien, vous pouvez supprimer l’ancien répertoire « uploads ».

Haut de page

Une réflexion sur « Déplacer wp-content, plugins et uploads »

  1. Bonjour,
    J’ai actuelement mon dossier wp-content dans ce chemin sur mon serveur
    /var/www/wordpress/wp-content/uploads
    Je souhaiterai le déplacer ici:
    /home/yunohost.app/nextcloud/data/michelwnextcloud/files/upload
    Pensez-vous que cela soit possible à l’aide votre tutoriel? Auriez-vous des conseils particuliers avant de le mettre en oeuvre? En vous remerciant pour vos conseils avisés. Sachant que ma version de wordpress est la 4.9.

Laisser un commentaire

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