WordPress est un outil de création de sites web extrêmement populaire, à tel point qu’il y a de nombreux scripts automatiques qui essaient de hacker les tables de la base de données de WordPress. Par défaut WordPress créer plusieurs tables qui possèdent toutes le préfixe “wp_”. Si le préfixe reste le même cela représente un risque de sécurité non négligeable.
Cet article présente une méthode simple pour changer ce préfixe (si cela n’a pas été fait lors de l’installation) et ainsi améliorer la sécurité d’un site WordPress.
Risques en laissant les préfixes par défaut
Les hackers utilisent des scripts automatisés qui tentent des injections SQL sur des failles connues de WordPress ou de certains plugins WordPress. Sachant que la base de données contient pratiquement toutes les informations du site, ces failles peuvent être exploitées pour l’une des raisons suivantes:
- Ajouter du contenu sur le site (exemple : liens vers des sites illégaux).
- Ajouter des commentaires de spams
- Détruire le contenu du site
- Faire planter le site
- Extraire des informations (récupérer la liste des emails des personnes qui ont laissées un commentaire)
Sachant que les scripts sont automatisées, ils tentent des requêtes les plus probables possibles. Autrement dit, les scripts utilisent en général des injections SQL avec le nom des tables qui possèdent le préfixe par défaut (cf. “wp_”). En laissant les préfixes des tables par défaut, cela facilite indirectement le travail de ces hackers.
Quel préfixe utiliser ?
Certes, nous venons de comprendre que le préfixe par défaut est à éviter, mais alors quel préfixe utiliser? Utiliser un nom trop commun n’est pas très sécurisé non plus. Par exemple, un préfixe tel que “monsite_” peut être trop facilement deviné. Pour vraiment compliquer la vie des hackers il faut plutôt utiliser un préfixe mélangeant les caractères et les chiffres, tel que “fym39dtz_”.
Astuce : en utilisant un préfixe qui commence par “wordpress” (puis d’autres caractères) il est plus facile de reconnaître les tables qui correspondent à l’installation WordPress au cas où votre base de données contient d’autres tables qui ne sont pas liées à ce CMS. Par exemple “wordpress_fym39dtz_”.
Attention : comme le fait remarquer Julio de @BoiteAWeb (merci à lui), il n’est pas recommandé d’utiliser un préfixe qui continu de commencer par “wp_”, même si le préfixe est “wp_fym39dtz_”. En effet, il peut y avoir des soucis si on a plusieurs installations WordPress “wp_site1_”, “wp_site2_”, “wp_site3_” et “wp_” et qu’on souhaitent utiliser un plugin qui change le préfixe en exécutant une requête telle que :
... WHERE table LIKE 'wp_%'
Préface : effectuer une sauvegarder
Avant de tenter de modifier la base de données, il convient de faire un backup (cf. une sauvegarde) de toute la base de données. Il est possible de sauvegarder les tables facilement dans PhpMyAdmin.
Modifier le fichier wp-config.php
Avant d’effectuer des modifications dans la base de données il faut juste faire une petite modification dans le fichier wp-config.php qui se trouve à la racine de l’installation WordPress. Ce fichier contient une variable qui indique au code PHP le préfixe des tables. La ligne ressemble à ceci:
$table_prefix = 'wp_';
Il convient de remplacer ce code avec le préfixe de votre choix. Pour les besoins du tutorial, le préfixe sera “fym39dtz_” et la ligne deviendra donc:
$table_prefix = 'fym39dtz_';
Il faut ensuite penser à sauvegarder la modification et à l’envoyer sur le serveur avec votre logiciel FTP habituel.
Modifier le nom des tables
Pour modifier le nom des tables il est possible de modifier le nom grâce à l’interface de PhpMyAdmin mais c’est un peu long. Pour gagner du temps il suffit simplement de copier/coller les requêtes SQL ci-dessous (en adaptant le préfixe par vos besoins) :
RENAME TABLE `wp_commentmeta` TO `fym39dtz_commentmeta`; RENAME TABLE `wp_comments` TO `fym39dtz_comments`; RENAME TABLE `wp_links` TO `fym39dtz_links`; RENAME TABLE `wp_options` TO `fym39dtz_options`; RENAME TABLE `wp_postmeta` TO `fym39dtz_postmeta`; RENAME TABLE `wp_posts` TO `fym39dtz_posts`; RENAME TABLE `wp_termmeta` TO `fym39dtz_termmeta`; RENAME TABLE `wp_terms` TO `fym39dtz_terms`; RENAME TABLE `wp_term_relationships` TO `fym39dtz_term_relationships`; RENAME TABLE `wp_term_taxonomy` TO `fym39dtz_term_taxonomy`; RENAME TABLE `wp_usermeta` TO `fym39dtz_usermeta`; RENAME TABLE `wp_users` TO `fym39dtz_users`;
Fonctionnalités multi-sites activés
Si la fonction multi-sites de WordPress est activé, il y a quelques tables supplémentaires qui mérites elles aussi d’avoir un préfixe adapté. Il convient dans ce cas là d’exécuter ces lignes:
RENAME TABLE `wp_blogs` TO `fym39dtz_blogs`; RENAME TABLE `wp_blog_versions` TO `fym39dtz_blog_versions`; RENAME TABLE `wp_registration_log` TO `fym39dtz_registration_log`; RENAME TABLE `wp_signups` TO `fym39dtz_signups`; RENAME TABLE `wp_site` TO `fym39dtz_site`; RENAME TABLE `wp_sitecategories` TO `fym39dtz_sitecategories`; RENAME TABLE `wp_sitemeta` TO `fym39dtz_sitemeta`;
Modifier les données de certaines tables
En plus de modifier le nom des tables, il faut aussi modifier certaines données contenus dans les tables WordPress pour s’assurer du bon fonctionnement du site.
Requêtes de bases
Pour modifier les données d’une installation simple de WordPress, il convient d’effectuer quelques requêtes.
Modifier le contenu de la table wp_options (nouvellement renommée) :
UPDATE `fym39dtz_options` SET `option_name` = REPLACE( option_name, 'wp_', 'fym39dtz_' ) WHERE `option_name` LIKE 'wp_%';
Cette requête va normalement modifier au moins un enregistrement (cf. la valeur de “wp_user_roles”).
Modifier le contenu de la table wp_usermeta (nouvellement renommée) :
UPDATE `fym39dtz_usermeta`
SET `meta_key` = REPLACE( meta_key, 'wp_', 'fym39dtz_')
WHERE `meta_key` LIKE 'wp_%';
Cette requête va normalement modifier au moins 3 enregistrements (dont “wp_capabilities” ou “wp_user_level”).
Trouver les autres données à modifier
Il n’est pas impossible que certains plugins aient créées d’autres tables ou insérées des données dans les tables par défaut de WordPress. La solution la plus simple pour déceler les autres données à modifier consiste à se connecter à l’interface de PhpMyAdmin et à chercher manuellement les tables qui commencent par “wp_”. Les tables qui commencent par “wp_” ont surement été ajoutées par un plugin quelconque. Il convient de renommer les tables manuellement en utilisant l’onglet “Opération” de PhpMyAdmin.
Ensuite, l’idée consiste à utiliser l’onglet “Recherche” (ou “Search” si l’interface est en anglais) de PhpMyAdmin. Cet onglet permet de chercher un terme contenu dans les enregistrements en recherchant sur l’ensemble des tables de la base de données. Il faut alors chercher le terme “wp_”. S’il y a des enregistrement qui contiennent le terme “wp_” alors le résultat l’indiquera. Il faut ensuite modifier un-à-un les enregistrement concernés.
Dernière étape : faire un dernier backup et tester
Avant de finir il faut penser à créer un backup tout frais de votre nouvelle base pour pouvoir restaurer votre site s’il le faut. Attention, il faut éviter d’écraser le premier backup qui peut toujours servir.
Finalement il faut effectuer des tests du site. Il faut s’assurer que le site fonctionne correctement. Voici une petite liste non-exhaustive des fonctionnalités à tester sur votre site:
- Tester les différents types de pages du site (page d’accueil, page classique, article, page de catégorie …)
- Tester les pages de l’interface administrateur
- Essayer d’ajouter un commentaire sur un article ou d’envoyer un message sur un formulaire (si applicable)
- Tester avec attention les plugins du site. Ceux-ci sont susceptibles d’avoir été impacté par la modification du préfixe (ça dépend aussi de la qualité du code du plugin)
Bonjour,
J’ai essayé de faire les manips ci-dessous, tout fonctionne correctement pour moi… sauf une seule chose.
Lorsque je clic sur le titre d’un billet de mon blog, cela me redirige vers une page 404…
Une idée ?
Quand je passe la souris sur le lien du billet il indique en bas (en tant que lien) : http://www.nomdemonsite.com/monprefix
Merci d’avance…
[…] Voir un tutoriel complet : changer le préfixe des tables WordPress. […]
Bonjour,
Après avoir effectuer les manip, /wp-admin/install.php me redemande d’installer WordPress !!
Que dois-je faire ?
D’avance merci
JLuc
Salut Tony,
Avec la nouvelle table de WordPress termmeta, ton article de référence mériterait une petite mise à jour.
Merci
Grégoire
Merci pour ce tuto, il est pratique, efficace et facile d’accès.
Grâce à lui, j’ai mis fin à 24 h de galère.
Un grand merci
Jean-Marie
[…] 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é […]