Et dire que je n'ai pas toujours présenté User Name Security, mon premier plugin de sécurité pour WordPress sorti en mars dernier.
Tout le monde le sait, la sécurité est toujours un élément à prendre en compte sur un site Internet. et pourtant, WordPress s'amuse à afficher un peu partout dans votre site votre login. User Name Security est donc là pour faire automatiquement le ménage.
Nous savons qui vous êtes
Quand vous créez un profil (ou que vous utilisez celui par défaut), WordPress va utiliser votre login et va l'afficher à plusieurs endroits de votre site, parfois de manière explicite, parfois caché dans le code source. Mais dans les deux cas, vous facilitez la tâche de celui qui va pirater votre site. Attention, je ne dis pas que cela lui permet directement de se connecter à votre base de donnée ou à l'administration de WordPress, mais disons que vous lui mâchez une partie du travail.
Par défaut, WordPress va donc afficher votre login à ces différentes endroits :
- dans le code source des pages auteurs, pour tous les thèmes qui utilisent la fonction body_class. Il affiche d'ailleurs également l'ID du compte concerné au passage.
- dans tous les endroits où vous afficher l'auteur de vos articles (sauf si vous avez eu le réflexe de changer manuellement le nom d'affichage de votre profil, mais ce n'est pas le cas dans 95% des cas).
- dans l'URL des pages des différents utilisateurs.
Bref, vous donnez accès à des données sensibles de manière très directe, et autant éviter cela.
WordPress et la vie privée des utilisateurs
Le plugin User Name Security va permettre justement de corriger de manière automatisée ces différents problèmes :
La fonction body_class
A la base, cette fonction à insérer dans la balise body permet d'ajouter des classes permettant de changer l'apparence de chaque type de contenu. Sur la page d'un auteur, d'un administrateur ou même d'un contributeur, WordPress va insérer dans cette balise l'identifiant de l'utilisateur ainsi que le nicename, c'est à dire une version simplifiée du login (sans espace, majuscule, caractères spéciaux ni accents).
Avec ces deux informations, vous donnez donc à tout pirate des indices pour avoir accès aux zones privées de votre site. Le plugin WordPress User Name Security va filtrer automatiquement la fonction body_class pour supprimer ces deux informations, ce qui devrait vous donner le rendu suivant :
Les noms d'affichage et les surnoms
Là, cela se complique. Dans un profil utilisateur, il existe plusieurs champs à remplir :
- le login : vous ne pouvez pas le changer et c'est lui qui est utilisé lors de la création du compte
- Le prénom et le nom : ils sont utilisés pour compléter votre profil
- Le pseudonyme (appelé nickname en anglais) : par défaut, il est identique au login
- Le nom à afficher publiquement (appelé Display Name en anglais) : par défaut, il est identique au login
Le problème, c'est que toutes les fonctions qui récupèrent l'auteur d'un article vont utiliser le nom à afficher publiquement. Donc si l'utilisateur ne pense pas à le changer, WordPress l'utilise et affiche clairement le login de l'utilisateur concerné.
Le plugin va donc avoir un but très simple :
- à chaque création d'un nouvel utilisateur, le Display Name et le Nicename sont modifiés par une valeur aléatoire.
- à chaque fois qu'un utilisateur est connecté, le plugin vérifie que son Display Name et son Nicename sont bien différents du login. Si ce n'est pas le cas, il les modifie par une valeur aléatoire.
La valeur aléatoire utilisée est la suivante : Nouvel utilisateur XXX, où XXX est un chiffre aléatoire à 6 chiffres (et donc différent de l'identifiant). Et le tour est joué : vous n'affichez plus votre login sur votre site, ce qui vous permet donc de renforcer un peu la sécurité de votre WordPress.
L'URL des pages auteurs
Enfin, le dernier endroit où l'on peut encore voir les logins, c'est tout simplement l'URL des utilisateurs. Le plugin va donc automatiquement les filtrer lors de la création d'un nouveau profil, en ayant une valeur lambda du type profil-XXX, où XXX est là encore un nombre aléatoire.
Cette partie du plugin User Name Security ne fonctionnera que sur les futurs profils. J'aurais pu activer cette fonctionnalité pour les utilisateurs existants, mais cela provoquerait irrémédiablement des erreurs 404, et cela vous forcerait à faire des redirections manuelles.
Si vous voulez quand même le faire pour vos utilisateurs déjà existants, faites-le comme un grand avec le très bon plugin SF Author URL Control.
Le plugin User Name Security
Pour fonctionner, le plugin a juste besoin d'être activé. Une fois que cela est fait, vérifiez juste que vous avez bien modifié les noms d'affichages pour les différents rédacteurs de votre site.
Pour information, le plugin est compatible pour les versions française et anglaises de WordPress, et dispose de fichiers de langues si jamais vous voulez faire des traductions en espagnol, allemand ou autre. Voici la traduction actuellement mise en place :
- pour l'URL des nouveaux profils :
- EN : user-xxx
- FR : profil-xxx
- Pour le nom d'affichage et le surnom :
- EN : New user XXX
- FR : Nouvel utilisateur XXX
Vous trouverez le plugin directement sur le site officiel de WordPress : téléchargez User Name Security. Il vaut vraiment le détour pour renforcer la sécurité de votre site Internet.
Merci d'ailleurs à Julio Potier de 21douze (ex. BoiteAWeb) pour son aide car il a simplifié en un éclair mon code.
7 Commentaires
Très intéressant, je suis surtout étonné de ne pas connaître de plugin qui fait la même chose, ou plus probablement qui fait ceci en même temps que d'autres choses. Je ne dis pas que ça n'existe pas - peut-être faut-il voir du côté des Better WP Security ou autre du même genre - mais là tout de suite aucun nom ne me vient. Donc, chapeau ! ;-)
Une petite question, d'un chat échaudé qui craint l'eau froide : l'as-tu testé avec Buddypress ?
Plugin pas mal. J'ai regardé le code source c'est propre et plutôt bien construit.
A noter, j'avais travailler sur une première version d'un plugin qui envoi un email à chaque fois que quelqu'un se connecte à l'espace administrateur. Ça peut aussi envoyer un email à chaque fois que quelqu'un échoue à se connecter (mais attention tout de même si un robot tente plus de 3.000 tentatives pour se connecter).
Voir : WP Security Login Notification
A noter : j'ai vérifié des logs et les robots qui tentent de se connecter en brute force utilisent quasiment tout le temps le login "admin".
Bonjour
Tout d’abord, un grand merci pour tes partages !
J’ai installé l’extension sur plusieurs sites (après l’avoir testée sur le mien) et, depuis la dernière MAJ de WP, j’ai des erreurs de mémoire insuffisante pour PHP sur certains sites, notamment sur des pages wp-admin.
Ces erreurs aboutissent à une coupure temporaire du site (5 à 10 min) / (visiteur et admin).
Après avoir isolé les extensions les unes après les autres, le PB s’est résolu en désactivant User Name Security.
Ce qui est curieux, sur 2 sites sur lesquels est installée l’extension. Même thème, mêmes extensions l’un fonctionne et l’autre non :
mouvements-libres.fr : bloque
formation-outils-web.fr : fonctionne
Il se peut que le problème vienne de la config serveur, mais je n’ai pas trouvé (même en augmentant la mémoire de PHP à 96 Mo)
Très bizarre ce comportement, car le plugin est très léger quant à sa conception et son fonctionnement. Essayez de voir avec votre hébergeur pour savoir d'où pourrait provenir le problème.
Bonjour,
Là où je ne comprends pas, c'est que la partie publique peut nécessiter le nom public (display name publicly as Daniel Roch), et il faut s'assurer que le username est bien New User 369951.
Bref, je m'attendais à ce que le fonctionnement soit exactement à l'inverse.
En fait, il est beaucoup plus compliqué de WordPress de changer le login de l'utilisateur que son nom public. D'ailleurs, de base, il est impossible de faire cela dans l'administration de WordPress. Le plugin s'arrange donc pour ne jamais afficher le login de l'utilisateur en forçant une valeur différente pour le nom public.
This plugin is a *very* good idea. I've never quite seen the point of making a hacker's life 50% simpler by giving them half of the login credentials upfront, so thank you for solving that problem.
(apologies for doing this in English, but my French suffers from a massive lack of vocabulary :) ).
Laisser un commentaire