2012-12-12 17 views
0

Je crée une application CakePHP 2.2.3 qui doit dépendre d'une autre application existante pour ses informations de connexion. Les combinaisons nom d'utilisateur/mot de passe existent sur une autre base de données/serveur, et j'ai configuré mon application CakePHP pour créer de nouveaux utilisateurs en les connectant à mon interface pour la première fois. Voici le processus:CakePHP 2 Hashing Changement au fil du temps?

  1. Utilisateur Se connecte pour la première fois, fournit le nom d'utilisateur & mot de passe. enregistrement utilisateur CakePHP n'existe pas encore
  2. système vérifie pour voir si un utilisateur avec le même (aseptisé) nom d'utilisateur existe de l'autre côté
  3. Si un utilisateur existe, alors nous récupérons le mot de passe et comparer les mots de passe pour voir si ils correspondent.
  4. Si les mots de passe correspondent, hachage ce qui a été fourni et sauvegarder l'enregistrement utilisateur
  5. Connexion l'utilisateur

nouvellement créé Cela résout quelques problèmes pour nous, surtout avoir plusieurs endroits pour l'utilisateur de se connecter faire certaines choses.

Mon problème semble être que la valeur obtenue par CakePHP quand il hache les mots de passe semble changer avec le temps. Ainsi, au lieu de connecter l'utilisateur avec son mot de passe, il crée un nouvel enregistrement d'utilisateur tous les jours suivant sa connexion. J'ai rencontré un problème où je ne pouvais pas me connecter avec un utilisateur particulier hier ... alors j'ai vérifié login() action vu que la valeur hachée du mot de passe était.

Le mot de passe de l'utilisateur particulier est «routes

Hier, le hachage était: 988042d7f4e62760238d895472ecaf1844094f9f

Aujourd'hui, quand je Hash routes que je reçois: a8318e7bbe8ee5efc59f53b4ede4d80dc0495c6d

Je ne sais vraiment pas où commencer à regarder pour voir pourquoi cela se produirait. Pour faire avancer mon développement, tout ce que je peux faire est de changer la valeur hachée du mot de passe pour l'enregistrement d'utilisateur que je veux me connecter. C'est le deuxième jour que j'aurai fait ça. Y at-il quelque chose que je pourrais avoir mal fait avec le hachage de sécurité ou la valeur de sel dans le config/core.php?

J'aimerais soit:

  1. Figure pourquoi les hash changent
  2. changer le composant Auth à utiliser l'autre base de données pour connecter les utilisateurs à

Mais je ne suis pas Sachez par où commencer sur l'un de ces

+1

1. Je n'ai jamais entendu parler du hachage qui se suffit à lui-même. Êtes-vous et un autre développeur travaillant et téléchargeant 2 diff. les versions du fichier core.php? 2. Voyons le code que vous utilisez pour obtenir la version hachée de 'routes'. 3. quelle version de gâteau utilisez-vous? –

+0

Dans app/Config/core.php son défini le sel. Où il est dit Configure :: write ('Security.salt', 'xxxxx ...'); Mais c'est toujours pareil. – Alvaro

+0

Consigner temporairement les paramètres transmis à [Security :: hash] (http://api20.cakephp.org/view_source/security#line-86), ils pourraient être révélateurs. Par exemple, une fonction/action utilise peut-être un algorithme de hachage différent ou même un sel différent. Enfin, si vous écrivez des tests unitaires, ils vont probablement révéler ce qui se passe. – jeremyharris

Répondre

1

Je ne peux pas dire quel est le problème, mais je peux vous dire où chercher. Le composant Auth dans CakePHP utilise la classe Security pour effectuer un hachage de mot de passe.

public static function password($password) { 
    return Security::hash($password, null, true); 
} 

Cela dit la classe de sécurité de hachage votre mot de passe avec l'algorithme par défaut et d'utiliser le sel configuré dans Security.salt. Si la valeur de Security.salt est différente dans les deux applications, le hachage ne correspondra pas.

La deuxième possibilité est que lorsque vous créez l'enregistrement utilisateur, vous n'utilisez pas les mêmes paramètres pour Security :: hash que AuthComponent. Vérifiez que vous ne spécifiez pas un algorithme différent ou que vous ne fournissez pas de sel.

La troisième possibilité est qu'une application ne possède pas d'algorithme de hachage. Par exemple, si sha1 est disponible sur votre application de connexion, mais pas sur votre application de base de données, les hachages ne correspondent pas. L'application de base de données retournera à sha256 et l'application de connexion utilisera sha1.

+0

Je ne pouvais pas dire à partir de sa question que les deux applications étaient gâteau «dépendent d'une autre application existante». J'ai l'impression qu'il tirait d'une API. OP pouvez-vous clarifier? –

+0

La deuxième application n'interagit pas directement avec mon application CakePHP ... Je n'utilise que sa base de données pour l'authentification. Les mots de passe sont en clair et désordonnés à l'autre extrémité ... ce que je trouve dérangeant mais cela dépasse le cadre de ma question actuelle. – DirtyBirdNJ

+0

Si les mots de passe sont stockés en clair, où le hachage est-il effectué? Après qu'ils sont extraits de la base de données? – dmertl

0

Cela peut arriver si vous effectuez certaines acrobaties dans une fonction de mise à jour de type crud. Fondamentalement, ce qui peut arriver, c'est que vous sauvegardez le mot de passe deux fois. Vous avez probablement un code dans votre modèle comme:

public function beforeSave($options = array()) { 
    if(isset($this->data[$this->alias]['password'])) { 
    $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']); 
    } 
return true; 
} 

qui garantit que toutes les données de mot de passe associés au modèle va se hashed avant qu'il ne soit envoyé à la DB, en tant que mesure de sécurité. MAIS, si vous appelez quelque chose comme $ this-> MyModel-> read (null, $ someId) dans votre fonction de mise à jour, vous allez définir l'intégralité des données de votre enregistrement sur le modèle - y compris le mot de passe précédemment haché - et votre le code le fera docilement une deuxième fois, ce qui n'est clairement pas ce que vous voulez. Donc oui, dans ce genre de circonstances, vous aurez de la dérive.

Questions connexes