Avec WordPress, une bonne pratique de sécurité est d’utiliser un préfixe de base de données différent du préfixe par défaut. Celà complique en effet la tâche d’éventuels pirates.
Le préfixe par défaut de WordPress est « wp_ ». On peut le changer lors de l’installation de WordPress ou plus tard. Nous allons voir dans cet article comment changer le préfixe d’un site existant.
Il faut sauvegarder la base de données avant tout changement.
Ce tutoriel s’applique aux installation WordPress classiques. Pour une installation multisite, suivre les instructions de cet article de WPmuDev.
Changer le préfixe des tables
Quel préfixe choisir ?
L’idéal est d’utiliser 6 à 10 caractères composés de lettres minuscules ou majuscules et de chiffres, tel que p7fQ25Hg_ ou i9s5c0Fu1P_. Pour le créer, l’idéal est d’utiliser lastpass password generator, en n’oubliant pas d’ajouter « _ » à la fin du préfixe généré.
Avec phpMyAdmin :
- Sauvegarder la base de données ;
- Remplacer le préfixe de table : en sélectionnant toutes les tables (tout cocher) puis « remplacer le préfixe de table ».
Et voilà, le préfixe des tables de notre base de données est devenu « newprefix_ ». A ce stade, notre site ne fonctionne plus du tout ! En effet, on n’a pas encore « dit » à WordPress que le préfixe de tables a changé.
Modifier wp-config.php
On édite wp-config.php pour que la ligne :
$table_prefix = 'wp_';
devienne
$table_prefix = 'newprefix_';
Après enregistrement du fichier modifié, les internautes peuvent de nouveau accéder au site. Mais l’accès au tableau de bord reste bloqué.
Changer le préfixe de certains contenus des tables
Le préfixe de table est également utilisé à l’intérieur de certaines tables. C’est le cas de certains contenus du champ option_name de la table « newprefix_options », et du champ meta_key dans la table « newprefix_usermeta ».
Modifier les « option_name » avec l’ancien préfixe
La commande SQL pour afficher les lignes concernées, de la table « newprefix_options » est :
SELECT * FROM `newprefix_options` WHERE `option_name` LIKE '%wp_%'
On peut aussi le faire dans l’interface graphique de phpMyAdmin.
On obtient une liste d’éléments de la table qui contiennent wp_. Mais attention, bon nombre de lignes ne doivent pas être modifiées. Pour le site dont je réalise la modification en écrivant ce tutoriel, j’ai obtenu 78 lignes dans lesquelles ‘option_name’ est « LIKE » ‘wp_’. En fait, la seule à modifier (à la main) est wp_user_roles qui devient newprefix_user_roles .
Modifier les meta_key avec l’ancien préfixe
La commande SQL pour afficher les lignes concernées, de la table « newprefix_usermeta » est :
SELECT * FROM `newprefix_usermeta` WHERE `meta_key` LIKE '%wp_%'
Pour s’y retrouver, on ordonne la colonne « meta_key » puis on modifie, à la main, toutes les entrées pour lesquelles la valeur de « meta_key » commence par wp_. En général on trouve les valeurs suivantes, autant de fois qu’il y a d’utilisateurs enregistrés pour le site :
- wp_capabilities
- wp_dashboard_quick_press_last_post_id
- wp_media_library_mode
- wp_user-settings
- wp_user-settings-time
- wp_user_level
A ce stade, on vérifie que tout va bien en se connectant au tableau de bord du site modifié. Si tout va bien, on arrive à se connecter et on a terminé.
En cas de problèmes
Cet article de WPmuDev, donne quelques pistes si on observe des dysfonctionnements après le changement de préfixe.
Problème n° 1 : pas d’accès au site
Lorsqu’on met l’adresse du site dans un navigateur, on arrive à un écran nous proposant d’installer WordPress !
La solution est de modifier wp-config.php pour que la ligne $table_prefix = ‘newprefix_’; contienne la bonne valeur du nouveau préfixe.
Problème n°2 : les utilisateurs n’ont plus la permission de se connecter au site
Dans ce cas, on a omis de modifier une ou plusieurs entrées de la table « newprefix_usermeta » et certaines valeurs de « meta_key » contiennent toujours le préfixe « wp_ ». Il faut donc vérifier ce que l’on a fait.
Notre problème n’est pas résolu ?
Voir l’article How to Fix “Error Establishing Database Connection” for WordPress. Il arrive en particulier que des extensions mal codées utilisent uniquement le préfixe par défaut « wp_ ». Dans ce cas, elles ne peuvent plus fonctionner une fois le préfixe changé. Pour les identifier, on désactive toutes les extensions puis on les réactive une à une jusqu’à ce que le site casse. Une fois l’extension problématique identifiée, on la supprime. On peut aussi revenir à la copie de la base de données réalisée avant le changement.
[…] (contre les injections SQL notamment). Si vous ne l'avez pas fait au moment de l’installation, voici un site qui explique comme le faire sur un site déjà […]