Désactiver le renouvellement de mot de passe dans WordPress

Publié le 04 avril 2011 par Seomix @rochdaniel

On 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.

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

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.