MyBB.support, le portail francophone de MyBB

Version complète : Ûtilisation BDD
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Bonjour a tous, voila je commence a travailler sur un module ANNEXE à mybb qui aurait besoin des logins de la base de données de MyBB de notre site.

Je vous explique en deux mots, j'aimerai utiliser la BDD users de MyBB de notre site pour se connecter via les pages web que je suis entrain de créer. Le soucis étant que en observant les BDD, je me rends compte que MyBB encrypte/hach les mots de passes et je ne trouve ni ou ni comment ...

Voulant partir de rien, je cherche a savoir quelle fonctions je dois utiliser pour transformer le mot de passe entré par mon utilisateur sur ma page pour qu'il corresponde a celui enregistré dans MyBB (s'il est correct bien évidemment) pour lui autoriser l'entrée sur ces pages requérant donc cette identification.

J'ai donc pour cela un formulaire créé expressément pour ca ... mais pour le champ du mot de passe ($_POST['mot_de_passe'] par exemple) je ne sais pas ce que je dois en faire pour qu'il soit "transformé" de la meme manière que dans les tables mybb_users.

Si quelqu'un a une information, aussi petite soit-elle, il me rendrait un grand service en me la communicant Smile

Bonne journée, Malak

P.S.: j’espère avoir été le plus clair possible.
MyBB utilises un hashage spécifique dérivé du md5, avec un clé créée aléatoirement (elle est dans la table mybb_user, sous le nom de "salt")
C'est impossible de le déhasher.
L'algorithme du MD5 a récemment été percé, c'est pourquoi peu de développeurs l'utilisent de nos jours.
Cependant, pour vérifier le mot de passe d'un utilisateur, tu peux crypter la chaîne entrée en $_POST['mot_de_passe'], et la comparer à l'entrée dans la BDD.

La fonction de cryptage de MyBB est celle-ci :
Code PHP :
function salt_password($password$salt)
{
    return 
md5(md5($salt).$password);


Avec $salt, la valeur du champ salt de l'utilisateur (enregistré dans la BDD).
Ce que je cherche, c'est connaitre le type de hachage utilisé par MyBB pour pouvoir comparer la valeur dans les tables mybb_users et la valeur entrée par l'utilisateur.

Je pense que c'est exactement ce que Smith a posté, mais je ne comprends pas un truc.
MyBB encrypte le pass concaténé au md5 d'une clé créée de maniere aléatoire ? C'est ca ?

Donc ce qui est contenu dans la base de donnée, c'est le return de la fonction que tu m'as gentillement posté ?

MyBB n'utilise aucune méthode aléatoire ou propre : il s'agit d'un cryptage par sel.
On récupère le sel associé à l'utilisateur (champ "salt" de la base de données), on le crypte en md5, puis on le suit du mot de passe saisi par l'utilisateur (ex: $_POST['password']). Le tout est alors recrypté en md5.

La façon de faire de MyBB est incomplète (et puis le cryptage md5 n'est plus sur depuis qu'il a été cracké), mais elle est assez commune.
okay donc c'est bien comme je l'avais imaginé.

Et le sel associé est défini à la ligne 936 de member.php ?

merci beaucoup pour ces reponses, c'est exactement ce que je cherchais, ca va m'aider enormément Smile
Le sel n'est pas défini dans un fichier, sinon il n'aurait pas grand intérêt... C'est enregistré dans le champ "salt" de l'utilisateur, comme je l'ai dit plus haut.
oui oui ... mais je pense que mybb le definit a cette ligne la :

Code PHP :
$password random_str(); 

ligne 936 de member.php
Il suffit de remonter un peu plus haut...

Code PHP :
if($mybb->input['action'] == "resetpassword"

... pour voir qu'il s'agit d'un code exécute pour le "mot de passe oublié", et non pour l'inscription.
Et puis jusqu'à preuve du contraire, "password" veut dire "mot de passe", et non "sel"..

Je ne vois pas pourquoi tu cherches son utilisation dans MyBB si tu veux l'utiliser sur un site web à part...
Tu n'as qu'à récupérer le salt de l'utilisateur, crypter avec la fonction que je t'ai donné plus haut, et comparer avec le "password" de la base de données...
Bref. Merci beaucoup Smile

Bonne soirée
Bon je double post pour revenir vers vous, j'ai utilisé exactement la fonction que vous m'avez proposé mais je ne retombe pas sur les valeurs de la base de données.

Code PHP :
function debug($str)
{
    echo 
$str.'<br />';
}
function 
salt_password($password$salt)
{
    return 
md5(md5($salt).$password);
}
if(!isset(
$_POST['mot_de_passe']) OR !isset($_POST['compte']))
{
    include(
"form.php");
} else {
    
    
$username htmlspecialchars($_POST['compte']);
    
$password htmlspecialchars($_POST['mot_de_passe']);
    
    try 
    {    
        
$reponse $bdd_mybb->prepare('SELECT password,salt FROM mybb_users WHERE username = ?');
        
$reponse->execute(array($username));
        
        
$donnees $reponse->fetch();
        
        
$password_bdd $donnees['password'];
        
$password_changed salt_password($password$donnees['salt']);
        
        
$reponse->closeCursor();
    }
    catch(
Exception $e)
    {
        die(
'Erreur : '.$e->getMessage());
    }
    
    if(
$password_changed == NULL OR $password_bdd == NULL OR ($password_changed != $password_bdd))
    {
        
debug($password_changed);
        echo 
'Un champ est manquant ou la combinaison est incorrecte !';
        include(
"form.php");
    } else {
        
//verif admin
        //redirection admin.php avec $_SESSION trop coolos
        
echo 'BRAVO PAGE ADMIN VOILA VOILA';
    }


je vous ai mis le code ou ca coince, comme vous l'auriez compris, normalement, mon "script" est sensé à $password_changed qui est egal à $password_bdd SI le pass entré est correct ! Or Je tombe toujours sur une chaine de caractère différente.

J'ai essayé de trouver l'endroit dans mybb ou ils enregistre leur mot de passe, que je vois la fonction utilisé ou la méthode, mais en vain, je n'ai pas trouvé :/

Peut-etre pourriez-vous, a nouveau, m'éclairer ?
Pour information, j'ai trouvé la fonction correcte :

Code PHP :
/*
* $password = pass writen by the user
* $salt = random str contained in the DB
*/
function salt_password($password$salt)
{
      return 
md5(md5($salt).md5($password));

La fonction de salt que j'ai donné est celle de MyBB 1.4.8. Je n'ai pas vérifié les changements dans les versions plus récentes.
 Utilitaire de traduction fourni par Regentronique