Désactiver la remise à zéro du mot de passe de WordPress

Pour sécuriser votre site WordPress des hackeurs, une bonne technique consiste à empêcher le changement de mot de passe depuis un compte utilisateur ainsi que par mail. En utilisant ce hack, seuls les administrateurs connectés pourront effectuer cette manipulation.

Mise à jour : Julio de BoiteAWeb m’a proposé une version modifié pour améliorer la sécurité du script. La voici et merci à lui !

<?php
/*
* Plugin Name: Password Reset Removed
* Description: Removes the ability for non admin users to change/reset their passwords.
* Version: 1.1
* Author: Derek Herman ; Modified by Juliobox (boiteaweb.fr)
* Author URI: http://valendesigns.com
*/
add_filter( 'show_password_fields', 'baw_prr_i_am_admin' );
add_filter( 'allow_password_reset', 'baw_prr_i_am_admin' );
add_filter( 'gettext', 'baw_prr_remove_me' );

function baw_prr_i_am_admin()
{
 return is_admin() && current_user_can('administrator');
}
function baw_prr_remove_me($text)
{
 return str_replace( array('Lost your password?', 'Lost your password'), '', trim($text, '?') );
}

function baw_prr_no_password_change( $dummy1, $dummy2, $user )
{
 if( !baw_prr_i_am_admin() )
 unset( $user->user_pass );
}
add_action( 'user_profile_update_errors', 'baw_prr_no_password_change', 10, 3 );
?>

Proposé par Derek Herman, ce script PHP empêchera les utilisateurs non administrateurs de réinitialiser leur mot de passe.

Le voici dans son intégralité :

<?php
/*
* Plugin Name: Password Reset Removed
* Description: Removes the ability for non admin users to change/reset their passwords.
* Version: 1.0
* Author: Derek Herman
* Author URI: http://valendesigns.com
*/
class Password_Reset_Removed
{

function __construct()
{
add_filter( 'show_password_fields', array( $this, 'disable' ) );
add_filter( 'allow_password_reset', array( $this, 'disable' ) );
add_filter( 'gettext', array( $this, 'remove' ) );
}

function disable()
{
if ( is_admin() ) {
$userdata = wp_get_current_user();
$user = new WP_User($userdata->ID);
if ( !empty( $user->roles ) && is_array( $user->roles ) && $user->roles[0] == 'administrator' )
return true;
}
return false;
}

function remove($text)
{
return str_replace( array('Lost your password?', 'Lost your password'), '', trim($text, '?') );
}
}

$pass_reset_removed = new Password_Reset_Removed();
?>

Pour l’installer sur votre WordPress, connectez-vous sur votre serveur FTP à l’aide de votre client favori – FileZilla, Tansmit, etc. Créez un nouveau dossier que vous nommerez mu-plugins dans le répertoire /wp-content/

Ce dossier présente une particularité propre à WordPress : tous les plugins présents à l’intérieur seront activés d’office – d’où le nom de must-use pour mu.

Envoyez le script PHP que vous aurez préalablement télécharger ou copier dans un nouveau fichier que vous nommerez par exemple lost-password.php.

Vous pouvez également télécharger directement le script à partir du lien suivant :

Password Reset Removed

Plugin WordPress pour empêcher la réinitialisation de mot de passe.

Taille : 1,4 KiB  •  Date : 26 janvier 2012 •  Hits : 748

Cette technique a été mise en place sur WordPress Channel afin d’améliorer le niveau de sécurité général. N’oubliez pas d’user d’un mot de passe solide et de le changer régulièrement.

Crédits photo : Groume

12 commentaires

  1. informatique grenoble

    je suis passer totalement à coté de cette fonction mais d’un autre coté, je trouve ca dérangeant de désactiver cette fonction …

    surtout que je vois pas comment un user peut recuperer le mdp …

    tant qu’on se connecte avec droits restreints, en https et les sauvegqrdes OK, je vois pas trop le pb en fait …

    merci pour cet éclairage !

    Sebastien

  2. BoiteAWeb

    Bonjour !
    Attention, il est tout de même possible de modifier le mot de passe avec ce plugin !
    Je viens de tester et c’est tout à fait faisabl « pour un hacker ».
    Ne pas confondre « show » et « allow », donc show_password_fields=false empêche juste l’affichage des champs mais pas la modification du pass.
    Voilà pour l’info du jour :]

  3. BoiteAWeb

    Voilà, article à jour, merci Aurélien, j’ai modifié la fonction « disable » pour qu’elle soit optimisée (une seule ligne), j’ai supprimé la classe (inutile), j’ai ajouté un hook sur l’update du profil avec ‘user_profile_update_errors’ et son 3ème paramètre « user ». Il me suffit de supprimer le pass pour qu’il ne soit pas mis à jour.
    Là maintenant on ne peut VRAIMENT plus changer son pass, même si on est un hacker

  4. marc metzger

    Bonsoir, je découvre ce site avec grand intérêt, félicitations pour le travail… Je serai intéressé pour voir la version final du script proposé par BoiteAWeb… Je débutes avec WP, alors pardonnez mon incompétence…
    Cordialement.

  5. d'haene

    Bonjour navré de laisser un commentaire sur un post vieux de presque deux ans mais je voulais savoir si il etait toujours judicieux d’installer ce mu-plugin avec la nouvelle version de wordpress ?
    Et si oui pouvez vous me precisez la demarche a suivre, en effet il y a quelque etapes qui m’échappe :
    1)dans le répertoire /wp-content/mu-plugins déposer le fichier php contenant le premier script de la page
    2) »Envoyez le script PHP que vous aurez préalablement télécharger ou copier dans un nouveau fichier que vous nommerez par exemple lost-password.php ». ?!?!?!
    Parlez vous d’un autre script ou du meme ? (Password Reset Removed = lost-password.php?????)

    Merci a toi et julio potier
    je ne commente pas beaucoup mais suit vos actus/astuce/hack/test et autres articles que vous publier a tous les deux.
    Depuis que je me suis lancer dans l’aventure wordpress les scripts donner comme ca me font peur : ne sachant pas les comprendre completement(ou pas du tout d’ailleurs) il est legitime de ce demander si la personne qui le met a disposition est fiable et n’as pas lancer « une porte d’entré » grande ouverte pour les hackeurs.

    La correction de julio est rassurante

    Continuer comme ça les gars, bravo pour la motiv des divers tuto
    (une idéé comme ca : avez vous deja penser a demander un espace sur le site wordpress ou vous pourriez mettre à disposition les tutos fiables et pertinent pour faciliter leur accés au nouveau comme moi ???)
    Cordialement

    1. Aurélien Denis auteur de l’article

      Pour l’avoir testé à l’instant (il est en place sur ce site), le script fonctionne bien. Attention toutefois à ne pas l’installer si WordPress dispose d’un espace membre (en WooCommerce notamment) car cela bloquerait la réinitialisation des mots de passe des clients.

      Merci du soutien !

Laisser un commentaire