Désactiver le renouvellement de mot de passe dans WordPress

WordPress passwordsOn m’a demandé il y a quelques jours s’il l’on pouvait désactiver l’option de renouvellement automatique d’un mot de passe dans WordPress.

Ne sachant ni comment faire, ni l’intérêt de faire une telle chose, je me suis penché sur la question. Et j’ai trouvé la réponse avec deux simples hacks.

Supprimer le renouvellement du Password WordPress

La première fonction à mettre en place est tout simplement de rendre impossible la demande de renouvellement pour l’ensemble de vos utilisateurs, vous y compris.

Dès que l’utilisateur demandera un nouveau mot de passe, un message lui indiquera que cela n’est pas possible. Pour cela, copiez-le code suivant dans le fichier functions.php de votre thème :

// La fonctionnalité de renouvellement de mot de passe ne fonctionnera pas
function supprimer_rest_mdp() {return false;}
add_filter ('allow_password_reset','supprimer_rest_mdp');

La deuxième étape consiste à supprimer les deux liens qui permettent d’accéder à cette fonctionnalité. Le premier lien pour le mot de passe oublié est situé sous le formulaire de login. Le second bouton de renouvellement de mot de passe est quant à lui situé dans le message d’erreur qui est affiché si l’utilisateur se trompe en entrant ses identifiants.

Renouveler son mot passe sous WordPress
2 liens pour renouveller son mot passe sous WordPress

Si votre WordPress est en langue anglaise, utilisez le code suivant :

//Version anglaise : On enlève le lien de renouvellement du MDP en bas du formulaire de bas de page
function enleve_mdp_text ($text) {if ($text == 'Lost your password?') {$text = '';} return $text;}
function enleve_mdp() {add_filter('gettext','enleve_mdp_text');}
add_action ('login_head','enleve-mdp');
function enleve_mdp2 ($text) {return str_replace('Lost your password</a>?','</a>',$text);}
add_filter ('login_errors','enleve_mdp2');

Si par contre votre blog utilise la langue de molière, faites plutôt appel à ce code PHP :

//Version française : On enlève le lien de renouvellement du MDP en bas du formulaire de bas de page
function enleve_mdp_textfr ($text) {if ($text == 'Mot de passe oublié&nbsp;?') {$text = '';} return $text;}
function enleve_mdp_fr() {add_filter('gettext','enleve_mdp_textfr');}
add_action ('login_head','enleve_mdp_fr');
function enleve_mdp_textfr2 ($text) {return str_replace('Avez-vous perdu votre mot de passe</a>&nbsp;?','</a>',$text);}
add_filter ('login_errors','enleve_mdp_textfr2');

Le tour est joué. Il sera désormais impossible pour un utilisateur de votre blog WordPress de demander le renouvellement de son mot de passe, même en connaissant l’url qui active cette fonction.

Source d’origine pour le script : WordPress Support

Modifier les erreurs de login WordPress

On peut également choisir de remplacer le texte d’erreur affiché lors du login par un texte de son choix. Pour cela, un petit hack dans le fichier functions.php de votre thème WordPress fera l’affaire ;

function mafonctionmdp () {return 'TEXTE A AFFICHER';}
add_filter ('login_errors','mafonctionmdp');

Pensez juste à modifier le texte à afficher par le message d’erreur souhaité, comme par exemple :

« Désolé, mais il semblerait qu’une erreur soit apparue lors de votre connexion au blog WordPress »

Pourquoi supprimer le renouvellement d’un mot de passe

Au tout début, j’ai trouvé que le fait de désactiver cette fonction ne pouvait que nuire à un site, puisque c’est la méthode de secoure en cas de perte de son mot de passe. Ce n’est d’ailleurs par pour rien que le lien est intitulé ainsi :

Mot de passe oublié ?

Sauf qu’en y réfléchissant un peu plus longuement, j’ai trouvé de multiples intérêts à la chose. Tout d’abord, on réduira les problèmes de sécurité quand un utilisateur réussit à hacker notre boite email. Comme il ne peut demander le renouvellement du mot de passe, il ne pourra pas hacker notre site.

Ensuite, cela permet de gérer de manière plus drastique une communauté. Imaginons que vous avez créé un compte utilisateur pour avoir un deuxième rédacteur. Au bout de quelques mois, vous décidez de vous séparer de la dite personne, mais vous souhaitez conserver son historique, son compte et les articles qui y sont rattachés. Il ne reste plus qu’à modifier son password, puisque l’utilisateur ne pourra jamais demander le renouvellement de son mot de passe.

Libre à vous donc de faire appel ou non à ce hack WordPress. D’ailleurs, pour plus de sécurité avec le formulaire de login, je vous conseille l’excellent plugin Login Lockdown qui va bloquer une adresse IP si elle tente un trop grand nombre de fois de se loguer avec échec.

Daniel Roch

Conférencier, auteur, consultant et expert SEO WordPress, CEO de SeoMix et SEOKEY

14 Commentaires

Jeremy Le 04 avril 2011 à 10h48

Bon article ! Pour ta deuxième remarque, si on décide de se séparer d’un rédacteur tout en gardant ses articles et son historique, il est à mon avis plus simple de modifier son role pour le rendre simple « subscriber » plutot que de changer son mot de passe. Non ?

Pierre Le 04 avril 2011 à 11h16

Salut Daniel

Nice post ;o)

et félicitations

Pierre

Daniel Roch Le 04 avril 2011 à 13h41

@Jeremy : c’est aussi une solution, mais elle est (un peu) plus risquée, car un utilisateur niveau « subscriber » peut potentiellement exploiter plus de failles de sécurités (un peu comme les versions 3.0.4 et 3.0.5 de WordPress)

Crunch Le 04 avril 2011 à 20h23

Article assez intéressant !

Pour ta 2eme remarque, une astuce serait, au lieu de changer le mot de passe, changer l’adresse mail de l’ancien rédacteur, ainsi, pas de problème ;)

delphine Le 05 avril 2011 à 9h09

C’est moi qui est fait cette demande.
Il s’agit tout simplement pour moi de gérer le mot de passe de mes abonnés pour que je puisse les gérer moi-même. Les abonnés sont inscrits pour élaborer un espace membre, hors ce membre peut-être une entreprise qui contient de nombreuses personnes. Ainsi, si un employé veut se connecter et qu’il n’a plus le mot de passe, il peut alors passer outre et le changer, son collègue qui n’est aps au courant se retrouve alors dans l’impossibilité de se connecter et va alors la même démarche… Vous comprenez donc alors mon intérêt? Est-ce judicieux? Merci en tout cas pour cet article je vais essayer de le comprendre à la hauteur de mes connaissances. merci encore

EDIT : une autre question : où dois-je intervenir pour réécrire le texte  » ERROR: The password you entered for the username admin is incorrect.  » afin de le mettre en français d’une part, et d’autre signifier que pour avoir le mot de passe il faut nous contacter.
En tout cas merci encore, votre solution fonctionne comme je l’espérais. Vive les échanges de compétences!

Daniel Roch Le 05 avril 2011 à 16h04

Le texte en anglais dépend de la configuration du blog. Il faut avoir définie la langue sur « Français ». Pour cela, il faut éditer le fichier wp-config.php situé à la racine du site et y ajouer le texte suivant:

Johan Le 05 avril 2011 à 16h45

Hello !
Vraiment intéressant ton article, cela permet d’ajouter un niveau de sécurité supplémentaire à un blog mono-utilisateur, ce qui est mon cas.

Merci!

delphine Le 05 avril 2011 à 18h24

pour ta réponse au sujet de la langue ok, ce que je cherche à fermer c’est reformuler ce texte. Où dois-je intervenir?
Merci encore.

Daniel Roch Le 06 avril 2011 à 10h53

J’ai trouvé comment reformuler le texte d’erreur lors du login WordPress (que ce soit lors d’une erreur au niveau de l’identifiant ou du mot de passe utilisé). J’ai mis à jour l’article avec le hack correspondant. ;)

delphine Le 06 avril 2011 à 12h20

Merci! Je testerai cela demain!
Par contre, c’est étrange, lorsque que l’identifiant n’est pas correct il m’annonce un message d’erreur en français… « ERREUR : l’identifiant n’est pas valide.  » et pur une erreur du mot de passe : « ERROR: The password you entered for the username david is incorrect. « , cela vient certainement de mon fichier de traduction, à voir… Mais une question me vient alors à l’esprit : ces deux phrases ne viennent pas de la même fonction quelle est celle pour modifier l’erreur sur l’identifiant?
Je ne connait pas le php, j’image que ce n’est pas trop dur, qu’il s’agit probablement de la même syntaxe, en changeant « login_errors » par le bon terme non?
Désolé pour mon incompétence en matière de langage…
Merci pour votre intérêt et vos partage de connaissance, c’est très généreux.

Jérôme Le 13 avril 2011 à 0h40

« Il ne reste plus qu’à modifier son password, puisque l’utilisateur ne pourra jamais demander le renouvellement de son mot de passe. » ==> Ne suffirait-il pas de juste changer son email avec un email à toi ? Tout l’historique est conservé, pas de hack, et impossible pour lui de récupérer le mot de passe. En plus tu peux même savoir si il tente de récupérer son mot de passe puisque l’email arrive chez toi :)

Daniel Roch Le 13 avril 2011 à 8h08

Oui, c’est tout à fait possible.

Sauf que cela laisse toujours la possibilité de faire un attaque brute force sur le lien de renouvellement du mot de passe. Certes, si l’attaque fonctionne, l’email arriverait aussi chez soi, mais autant épargner cela à son serveur.

Eric Le 17 mai 2011 à 15h56

Salut,
Juste pour préciser que si ton login est relié a un annuaire LDAP. Je me vois mal autorisé les personnes à pouvoir récupérer (dans ce cas modifier) leur mot passe LDAP.

En tout cas merci pour ce tutos ! exellent :)

dresdes Le 27 juin 2012 à 11h03

bonjour ravie de découvrir ce tuto , mais chez moi ça ne marche
est ce dû au fait que j’ai personnalisé ma page d’accueil?
merci

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *