IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WordPress PHP Discussion :

Crypter des mots de passe dans une base de données WordPress


Sujet :

WordPress PHP

  1. #1
    Membre régulier Avatar de DarckCrystale
    Femme Profil pro
    Développeuse Web
    Inscrit en
    Juin 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeuse Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 71
    Points : 109
    Points
    109
    Par défaut Crypter des mots de passe dans une base de données WordPress
    Bonjour à tous !

    Aujourd'hui un de mes soucis à été de rechercher dans Wordpress la méthode de cryptage des mots de passe, pour pouvoir lier une table contenant des mots de passe existants à une base de données consacrée à Wordpress. Je ne sais pas si ce que j'ai trouvé sera utilisable pour ma problématique, mais vu le temps que j'ai passé dessus, je me demande si ça ne vaudrait pas le coup de l'écrire ici, histoire que Google puisse donner un réponse la prochaine fois qu'on lui posera la question en français.

    Donc, j'ai trouvé quelle méthode de cryptage Wordpress utilise pour ses mots de passe, et j'aimerais savoir où je peux poster cette découverte pour qu'elle puisse servir à d'autres.

    Pour récupérer la méthode de cryptage de Wordpress :

    Aller dans wp-includes, regarder le fichier pluggable.php :
    - vers la ligne 1495 vous avez une fonction qui s'appelle wp_hash_password et qui prend pour paramètre le mot de passe en clair.
    - vers la ligne 1529, juste en dessous de wp_hash_password, il y a wp_check_password, qui lui s'occupe de vérifier le mot de passe.
    Ces deux fonctions utilisent la classe PasswordHash, totalement indépendante et qu'on peut trouver à part sur internet. Cette classe contient deux méthodes qui nous intéressent : HashPassword($password) et CheckPassword($password, $stored_hash).

    Aller dans wp-includes, regarder le fichier class-phpass.php :
    - HashPassword($password) prend le mot de passe en clair qui lui est donné et le crypte, puis retourne la chaîne cryptée.
    - CheckPassword($password, $stored_hash) prend un mot de passe en clair et une chaîne cryptée et compare les deux. Il retourne vrai si le mot de passe en clair correspond au mot de passe crypté et faux sinon.
    Les deux fonctions précédentes créent une instance globale (pour avoir un singleton) de PasswordHash avec pour paramètre 8 et true (aucune idée de ce à quoi servent ces arguments), et utilisent ensuite les méthodes de classe HashPassword() et CheckPassword() pour leurs vérifications.

    Pour utiliser ça, j'ai fabriqué un petit bout de php test que j'ai mis à part dans un dossier avec le fichier class-phpass.php, je vous donne mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    <?php
     
    require_once( './class-phpass.php');
     
    /**
     * (PHP 4, PHP 5)<br/>
     * Strip whitespace (or other characters) from the beginning and end of a string
     * @link http://php.net/manual/en/function.trim.php
     * @param string $str <p>
     * The string that will be trimmed.
     * </p>
     * @param string $charlist [optional] <p>
     * Optionally, the stripped characters can also be specified using
     * the <i>charlist</i> parameter.
     * Simply list all characters that you want to be stripped. With
     * .. you can specify a range of characters.
     * </p>
     * @return string The trimmed string.
     */
     
    //function trim ($str, $charlist = " \t\n\r\0\x0B") {}
     
    /**
     * Create a hash (encrypt) of a plain text password.
     *
     * For integration with other applications, this function can be overwritten to
     * instead use the other package password checking algorithm.
     *
     * @since 2.5
     * @global object $wp_hasher PHPass object
     * @uses PasswordHash::HashPassword
     *
     * @param string $password Plain text user password to hash
     * @return string The hash string of the password
     */
    function wp_hash_password($password) {
        global $wp_hasher;
     
        if ( empty($wp_hasher) ) {
            require_once( './class-phpass.php');
            // By default, use the portable hash from phpass
            $wp_hasher = new PasswordHash(8, true);
        }
     
        return $wp_hasher->HashPassword( trim( $password ) );
    }
     
    $mdp_en_base = "wp";
    $mdp_recup_via_form = "wp";
     
    echo "mdp : $mdp_en_base<br><br>";
     
    $crypt = wp_hash_password($mdp_en_base);
     
    echo "mdp crypte :".$crypt."<br><br>";
     
    echo "mdp qu'on récupère dans le champ de connexion : $mdp_recup_via_form <br><br>";
     
    $test = $wp_hasher->CheckPassword($mdp_recup_via_form , $crypt);
     
    echo "resultat du test :";
     
    var_dump($test);
    C'est pas forcément très clair, mais il me semble qu'on peut s'en servir comme ça. Wordpress lui vérifie dans wp_check_password si le mot de passe enregistré a été fabriqué via phpass, pour être sûr. Je n'ai pas utilisé la fonction de wordpress pour la vérification, par contre wp_hash_password() de mon fichier est pûrement copiée collée du fichier pluggable.php.

    Voilà, donc si c'est de la redite, désolée, si je n'ai pas posté au bon endroit (ce qui est sûrement le cas), dites-le moi, ou déplacez mon post sans préavis J'espère que ça sera utile pour vous !

    Ci-dessous, la même en anglais :
    http://wordpress.stackexchange.com/q...crypt-password

    [Edit]

    La personne qui en avait besoin m'a dit que ça marche *fière* donc n'hésitez pas à l'utiliser.
    Si vous regardez bien, lorsque vous affichez votre $cryp, il change sans que vous changiez le mot de passe : par exemple si vous ouvrez le test.php avec votre navigateur, et que vous actualisez la page, vous verrez la chaîne changer ! Il faut donc bien utiliser le check de la classe PasswordHash pour les vérifications

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Merci pour la fonction et le partage
    Merci pour cet article mais je teins a signaler que c'est pas aussi simple que vous le croyez. La fonction génère un code aléatoire qu'il ajoute au mot de passe saisi qui a été lui même crypté en md5. Donc quand on utilise cette fonction, le code qu'on aura au retour ne sera jamais identique au code retourné au moment de l'inscription.
    Pour vérification: Écrivez la fonction et exécutez la deux fois avec le même mot de passe et comparé le résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    require_once('class-phpass.php');
     
    	function wp_hash_password($password) {
        global $wp_hasher;
     
        if ( empty($wp_hasher) ) {
            require_once( 'class-phpass.php');
     
            $wp_hasher = new PasswordHash(8, true);
        }
     
        return $wp_hasher->HashPassword( trim( $password ) );
    }
     
    	$crypt = wp_hash_password($password);
    	$test = $wp_hasher->CheckPassword($password , $crypt);
     
    	 echo "mot de passe crypte :".$crypt."<br><br>";
    	 echo "mdp qu'on récupère dans le champ de connexion : $password <br><br>";
     
    	 echo "resultat du test :";
    	 var_dump($test);
    	 exit();
    }
    1er test : DevWeb221!====>$P$BsVvBYhhLmfP6GHM1VV0ZMIfR22/PK/
    2eme test: DevWeb221!====>$P$BvMdWBEmTjIq7VJSC1A18gJxDVad5U/

  3. #3
    Membre habitué
    Homme Profil pro
    Collégien
    Inscrit en
    Septembre 2014
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Septembre 2014
    Messages : 65
    Points : 158
    Points
    158
    Par défaut
    Pour le même résultat on a plusieurs algo possibles, donc dans le cas où c'est hasher de manière évolutive (c-a-d que pour une même chaine encodée on a deux ou plus possibilités), il suffit de revoir la méthode de vérification des passwords en décodant le mdp dans la BDD, et en comparant cette chaine au mot de passe saisie, donc pas grand chose à modifier. Rien de compliqué en soit.

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Fonction décodage mdp dans la BDD
    Bonjour,
    T'aurais par par hasard une fonction qui permettrait de décoder le mot de passe qui se trouve dans la base de données? #Lokicoule

  5. #5
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    T'aurais par par hasard une fonction qui permettrait de décoder le mot de passe qui se trouve dans la base de données? #Lokicoule
    Ben non justement, c'est le concept du hashage, c'est que celui-ci ne soit pas réversible.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  6. #6
    Membre régulier Avatar de DarckCrystale
    Femme Profil pro
    Développeuse Web
    Inscrit en
    Juin 2013
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeuse Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 71
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par DarckCrystale Voir le message
    Si vous regardez bien, lorsque vous affichez votre $cryp, il change sans que vous changiez le mot de passe : par exemple si vous ouvrez le test.php avec votre navigateur, et que vous actualisez la page, vous verrez la chaîne changer ! Il faut donc bien utiliser le check de la classe PasswordHash pour les vérifications
    Citation Envoyé par DarckCrystale Voir le message
    Il faut donc bien utiliser le check de la classe PasswordHash pour les vérifications
    Je pense que la toute première personne à avoir up le topic n'a pas lu ce tout petit rajout en fin de post...

    Et sinon, je ne cherche pas à sortir des mots de passe d'une base de données wordpress, mais à utiliser une base de données wordpress sur une autre application tout en gardant les même identifiants que dans le wordpress. Donc si jamais d'autres personnes souhaitent faire la même chose, je pense que mon topic peut être utile.

    Je rajoute, pourquoi tant de troll pour un post qui a plus de six mois ?

  7. #7
    Membre habitué
    Homme Profil pro
    Collégien
    Inscrit en
    Septembre 2014
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Septembre 2014
    Messages : 65
    Points : 158
    Points
    158
    Par défaut
    C'était cadeau effectivement on n'est pas censé pouvoir reverse une chaine ayant été hashé.
    J'étais parti dans un autre délire où le mdp était crypté mais avec utilisation des mauvais termes.
    Bref, big confusion, big fail de ma part, merci sparta pour la correction

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Merci sparta=> fonction hashage
    Merci sparta c'est ce que je voulais lui faire comprendre en lui demandant de me fournir une fonction pouvant décoder le mdp haché de la BDD.
    Merci en encore une fois à tous d'avoir répondu. C'est vraiment gentil de votre part

  9. #9
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2021
    Messages : 9
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par zap221 Voir le message
    Merci sparta c'est ce que je voulais lui faire comprendre en lui demandant de me fournir une fonction pouvant décoder le mdp haché de la BDD.
    Merci en encore une fois à tous d'avoir répondu. C'est vraiment gentil de votre part
    salut sparta je sais que le sujet vieux mais ce serait sympha si tu pouvait me dire ou se trouve le sceipt de cryptage ? n'oublie pas que si la donnée doit etre cryptée elle doit etre decrypté à l'affichage donc c'est parfaitement reversible pour moi il sufit de prendre le module d'envoyer ton data crypter dans le script php et d'afficher le resultat

  10. #10
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 232
    Points : 15 525
    Points
    15 525
    Par défaut
    avec les versions actuelles de wordpress, on peut rapidement modifier l'API REST pour faire une vérification d'accès sans avoir besoin de connaitre les détails de structure de la base de données.
    si vous avez une question, il vaut mieux que vous commenciez une nouvelle discussion pour que les réponses ne se mélangent pas entre les différents sujets.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2021
    Messages : 9
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par mathieu Voir le message
    avec les versions actuelles de wordpress, on peut rapidement modifier l'API REST pour faire une vérification d'accès sans avoir besoin de connaitre les détails de structure de la base de données.
    si vous avez une question, il vaut mieux que vous commenciez une nouvelle discussion pour que les réponses ne se mélangent pas entre les différents sujets.
    merci de ta réponce je vais me renseigner sur le sujet et je vais essayé de posté au bonne endroit je suis un peu nouveaux sur le forum désolé

  12. #12
    Membre à l'essai
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2021
    Messages : 9
    Points : 13
    Points
    13
    Par défaut inversion est tout a fait possible et meme simple
    Citation Envoyé par zap221 Voir le message
    Merci pour cet article mais je teins a signaler que c'est pas aussi simple que vous le croyez. La fonction génère un code aléatoire qu'il ajoute au mot de passe saisi qui a été lui même crypté en md5. Donc quand on utilise cette fonction, le code qu'on aura au retour ne sera jamais identique au code retourné au moment de l'inscription.
    Pour vérification: Écrivez la fonction et exécutez la deux fois avec le même mot de passe et comparé le résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    require_once('class-phpass.php');
     
    	function wp_hash_password($password) {
        global $wp_hasher;
     
        if ( empty($wp_hasher) ) {
            require_once( 'class-phpass.php');
     
            $wp_hasher = new PasswordHash(8, true);
        }
     
        return $wp_hasher->HashPassword( trim( $password ) );
    }
     
    	$crypt = wp_hash_password($password);
    	$test = $wp_hasher->CheckPassword($password , $crypt);
     
    	 echo "mot de passe crypte :".$crypt."<br><br>";
    	 echo "mdp qu'on récupère dans le champ de connexion : $password <br><br>";
     
    	 echo "resultat du test :";
    	 var_dump($test);
    	 exit();
    }
    1er test : DevWeb221!====>$P$BsVvBYhhLmfP6GHM1VV0ZMIfR22/PK/
    2eme test: DevWeb221!====>$P$BvMdWBEmTjIq7VJSC1A18gJxDVad5U/
    le gros defaut faut du check controle comme on appelle çà c'est le user et pass avec un algho md5 ou autre sur un meme script est une faiblesse en sécurité et grosse comme une maison pour moi les element de cryptage ne devrait pas ce trouver dans un meme script et qui de plus accessible directement sur le net bienvenu wordpress qui en somme pratique pour l'utilisation mais en secu pour moi un grand zero quand il est mal employé bon je te donne le truc tu renverse la valeur de ton resultat dans un header locution tu lui attribue une valeur tu lui donne les condition dedrycptage ici en l'occurance si le resultat final donc ta variable est bien encrypter avec la bonne cle et tu remonte l'alho pour inverser les commande bon mm

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Mots de passe dans une base de données
    Par jockyboss777 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 25/02/2021, 16h47
  2. Réponses: 11
    Dernier message: 24/05/2011, 09h50
  3. Crypter le mot de passe dans une TextBox
    Par Stefounette dans le forum JavaFX
    Réponses: 3
    Dernier message: 31/03/2010, 14h28
  4. Réponses: 4
    Dernier message: 29/12/2009, 13h10
  5. Insertion des images et vidéos dans une base de données
    Par taouja dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 07/04/2007, 13h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo