2013-05-19 3 views
0

J'essaie de faire migrer les utilisateurs d'une base de données Joomla vers une base de données personnalisée en utilisant les tables et fournisseurs asp.net par défaut. Théoriquement, je peux changer le type de hachage de la valeur par défaut (SHA) à MD5 en changeant web.config, cependant, lors de la connexion il signale un mot de passe invalide (ou nom d'utilisateur, mais je doute que c'est ça). En examinant la table aspnet_Membership et la table Joomla_users, je peux voir que les deux ont le même mot de passe et les mêmes valeurs de sel par utilisateur (Joomla 1.7 le stocke en tant que mot de passe: sel mais facile à diviser en deux champs). Les deux semblent être au format base64, et l'ajout d'un utilisateur via le contrôle de connexion par défaut ASP se traduit par une paire de champs similaires pour le nouvel utilisateur (bien que le sel soit aléatoire, je ne peux pas comparer avec le même mot de passe).Modification de SqlMembershipProvider pour utiliser MD5, mots de passe style Joomla

Voici un extrait de mon web.config:

<system.web> 
    <machineKey validation="MD5"/> 
    ... 
<membership hashAlgorithmType="MD5"> 
    <providers> 
    <clear /> 
    <add name="AspNetSqlMembershipProvider" 
     type="System.Web.Security.SqlMembershipProvider" 
     connectionStringName="UserAuth" 
     enablePasswordRetrieval="false" 
     enablePasswordReset="true" 
     requiresQuestionAndAnswer="false" 
     requiresUniqueEmail="false" 
     maxInvalidPasswordAttempts="5" 
     minRequiredPasswordLength="6" 
     minRequiredNonalphanumericCharacters="0" 
     passwordAttemptWindow="10" 
     passwordFormat="Hashed" 
     applicationName="/" /> 
    </providers> 
</membership> 
</system.web> 

Une chose que je ne suis pas sûr de savoir si c'est md5, md5 ou MD5 (je l'ai vu à la fois ce dernier dans des échantillons de code en recherche sur Google). Cependant, je peux écrire des bêtises à la place et l'application ne semble pas battre une paupière.

Je ne souhaite pas particulièrement écrire un fournisseur d'appartenances personnalisé à moins qu'il n'y ait pas d'autre moyen.

Voici quelques PHP qui compare le Joomla haché mot de passe avec celui fourni en paramètre à cette fonction:

   $user_id = mysql_result($result, 0, 'id'); 
       $db_password = mysql_result($result, 0, 'password'); 
       $joomla = &New JConfig; 
       list($md5pass, $saltpass) = split(":", $db_password); 
       $md5_password = md5($user_password.$saltpass); 
       if (strcmp($md5_password, $suppliedpass) == 0) 
       { 
        return $user_id; 
       } 

Soit la version ASP ne tient pas compte ma demande md5, ou en quelque sorte il est le stockage dans une autre manière, ou je ne lui dis pas d'utiliser md5 correctement, ou ...? Je ne veux pas dire à 4000 utilisateurs de réinitialiser leurs mots de passe, bien que je sache que md5 n'est pas recommandé ces jours-ci.

Répondre

0

Je pense que je me suis débrouillé. Dans Joomla, à partir du code PHP, le md5 est appliqué pour passer + sel. Dans SqlMembershipProvider.cs, il est appliqué à salt + pass. Le SqlMembershipProvider.cs a été trouvé via SQLMembershipProvider - source code - peut-être pas la vraie source mais je ne vois pas pourquoi il devrait être différent de la vraie source dans cet aspect particulier.

Questions connexes