Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-01-2009 16:47:17

Chim
Membre
Date d'inscription: 24-12-2008
Messages: 34

[Résolu]Crypter son mot de passe dans la base de données

re bonjour, c'est encore moi smile

Alors voila, cette fois ci, je rame sur le hashage de mon mot de passe.
Cela fait une heure que je suis dessus et je ne trouve toujours pas pourquoi le mot de passe n'est pas crypté dans la BDD.

L'authentification, en revanche marche très bien.


voici l'extrait de mon code concerné.

Code:

     Zend_Loader::loadClass('Zend_Auth_Adapter_DbTable');
     $dbAdapter = Zend_Registry::get('dbAdapter');
                               
     $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
     $authAdapter->setTableName('users')
                       ->setIdentityColumn('login')
                       ->setCredentialColumn('password')
                       ->setIdentity($login)
                       ->setCredential($password);
                   // ->setCredential(md5($password)); 


   // do the authentication
       $auth = Zend_Auth::getInstance();
       $result = $auth->authenticate($authAdapter);
         .......

j'ai mis la ligne que j'utilise pour hasher mon mot de passe en commentaire car des lors que je la "dé-commente", et donc que je "commente" celle juste au dessus, l'authentification ne se fait plus.

j'ai aussi essayé avec ceci:
->setCredentialTreatment(MD5($password));

je suis peut-être complètement à l'ouest, mais j'ai pas trouvé beaucoup de documentation sur le sujet et donc je rame ^^"

peut-être que je dois changer quelque chose dans mon formulaire au niveau du password ?

Code:

$password = new Zend_Form_Element_Password('password');
        $password->setLabel('Password :')
        ->setRequired(true)
        ->addValidator('NotEmpty');

voila, si quelqu'un pouvait m'aider, ça serait sympa smile

Dernière modification par Chim (06-01-2009 11:10:39)

Hors ligne

 

#2 05-01-2009 17:52:05

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [Résolu]Crypter son mot de passe dans la base de données

Essaye ca :

Code:

->setCredentialTreatment("MD5(?)");

Dernière modification par alien7 (05-01-2009 17:54:56)


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#3 05-01-2009 17:55:52

Cidrolin
Membre
Date d'inscription: 21-08-2008
Messages: 74

Re: [Résolu]Crypter son mot de passe dans la base de données

Tu peux le crypter avant, directement en PHP, c'est ce que je fais, et y a pas de souci.

Hors ligne

 

#4 05-01-2009 20:17:40

Chim
Membre
Date d'inscription: 24-12-2008
Messages: 34

Re: [Résolu]Crypter son mot de passe dans la base de données

Cette solution (->setCredentialTreatment("MD5(?)"); )  ne semble pas fonctionner, et comment pourrais-je le crypter dans mon code avant? J'avais déjà cherché un petit peu mais pas trouvé grand chose hmm

Hors ligne

 

#5 05-01-2009 20:20:35

zantetsu
Membre
Date d'inscription: 05-01-2009
Messages: 15

Re: [Résolu]Crypter son mot de passe dans la base de données

bonsoir, étant le collègue de chim, je me suis penché sur le problème également, et bien sur, les mêmes causes ont les mêmes effets ^^

j'ai essayé ta solution alien7, mais ça ne marche pas :S

le code:

$authAdapter->setTableName('users')
                        ->setIdentityColumn('login')
                        ->setCredentialColumn('password')
                        ->setIdentity($login)
                        ->setCredential($password)
                      ->setCredentialTreatment("MD5(?)");

si je retourne a la page d'authentification, celle ci ne marche plus, sauf si je "commente" la ligne ->setCredentialTreatment("MD5(?)");

dans ce cas l'authentification re marche mais ca résous pas notre problème de "hashage" de mdp :S

Cidrolin a écrit:

Tu peux le crypter avant, directement en PHP, c'est ce que je fais, et y a pas de souci.

tu peux préciser Cidrolin en montrant un exemple stp car en tant que "noob" on vois pas trop comment faire ^^"

Dernière modification par zantetsu (05-01-2009 20:20:55)

Hors ligne

 

#6 05-01-2009 22:12:51

tonton flubb
Membre
Date d'inscription: 11-10-2008
Messages: 48
Site web

Re: [Résolu]Crypter son mot de passe dans la base de données

Voici le code que j'utilise et qui ne me pose aucun problème ...
Est-ce que l'ordre des lignes aurait une importante ? Ici je définis d'abord ma méthode setCredentialTreatment avant de lui spécifier le mot de passe à utiliser (setCredential).

Code:

$authAdapter->setTableName('membres')
        ->setIdentityColumn('username')
        ->setCredentialColumn('password')
        ->setCredentialTreatment('MD5(?)')
        ->setIdentity($username)
        ->setCredential($password);

Florent - Développeur Web

Hors ligne

 

#7 05-01-2009 22:25:02

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Résolu]Crypter son mot de passe dans la base de données

Hello,

Attention à la base de données quand même : MD5() n'est pas supporté par tous les SGBD.

@tonton flubb : l'ordre n'a pas d'importance.

@zantetsu : quand on parle de crypter avant, c'est le :

Code:

->setCredential(md5($password)) // donc le md5 est fait par PHP

Ceci fonctionne même si ton SGBD ne supporte pas MD5().

Avez-vous une erreur en retour ?

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#8 06-01-2009 09:30:50

Cidrolin
Membre
Date d'inscription: 21-08-2008
Messages: 74

Re: [Résolu]Crypter son mot de passe dans la base de données

effectivement oui, c'est en faisant un md5($password) juste avant le code de traitement à la base.

Hors ligne

 

#9 06-01-2009 09:37:26

Nikkau
Membre
Date d'inscription: 25-03-2008
Messages: 52

Re: [Résolu]Crypter son mot de passe dans la base de données

A noter qu'hasher les pass c'est bien, mais en md5 ça sert plus à rien aujourd'hui.

Hors ligne

 

#10 06-01-2009 09:48:55

zantetsu
Membre
Date d'inscription: 05-01-2009
Messages: 15

Re: [Résolu]Crypter son mot de passe dans la base de données

re,
j'ai essayer chez moi avant de me coucher d'inverser et aucun effet du à l'inversement des lignes tonton flubb, et pareil au travail :S

de plus, aucune erreur est affiché, donc je pense que ca dois venir d'autre chose, mais la je ne sais pas quoi :S

surement une erreur bete ^^"

je vous poste mon action login complète si vous voyez qque chose de mal écris, ou l'erreur qui me bloque depuis hier, merci de me l'indiquer smile

voila le code de mon action


function loginAction()
        {
               
        Zend_Auth::getInstance()->clearIdentity();
        $this->view->message = 'votre compte a ete cree mais il ne possede pas encore les droits dacces, contacter ladmin afin de les recuperer';

          if ($this->_request->isPost()) {
            // Recuperation des donnees de l'utilisateur
            Zend_Loader::loadClass('Zend_Filter_StripTags');
            $f = new Zend_Filter_StripTags();
            $login = $f->filter($this->_request->getPost('login'));
            $password = $f->filter($this->_request->getPost('password'));
           
            if (empty($login)) {
                $this->view->message = 'Entrez un nom d\'uilisateur.';
            } else {
                Zend_Loader::loadClass('Zend_Auth_Adapter_DbTable');
                $dbAdapter = Zend_Registry::get('dbAdapter');               
                            $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
                            $authAdapter->setTableName('users')
                            ->setIdentityColumn('login')
                            ->setCredentialColumn('password')
                            ->setIdentity($login)
                            ->setCredential($password);
                         // ->setCredentialTreatment('MD5(?)')
                         // ->setCredential(MD5($password));
                         // ->setCredential(PASSWORD($password));
                         // ->setCredentialTreatment(PASSWORD($password));
                         // ->setCredentialTreatment(MD5($password));               
             
              // do the authentication
                 $auth = Zend_Auth::getInstance();
             $result = $auth->authenticate($authAdapter);

                         if ($result->isValid()) {
               $data = $authAdapter->getResultRowObject(null, 'password');
               $auth->getStorage()->write($data);
               $this->_redirect('/');
                 }                   
            else {
              $this->view->message = 'Login failed.';
            }
                    }
          }       
          $this->view->title = "Authentification";
          $this->render();
        }

Dernière modification par zantetsu (06-01-2009 09:53:23)

Hors ligne

 

#11 06-01-2009 09:59:03

Guillhomme
Membre
Date d'inscription: 09-10-2008
Messages: 102

Re: [Résolu]Crypter son mot de passe dans la base de données

T'as essaye tout simplement de faire ?

Code:

$password = md5($password);

Sinon essaye de rajouter le logger pour les requetes SQL dans Firebug, tu verras plus facilement d'ou ca vient smile

Hors ligne

 

#12 06-01-2009 10:57:04

Chim
Membre
Date d'inscription: 24-12-2008
Messages: 34

Re: [Résolu]Crypter son mot de passe dans la base de données

Humm Zantetsu et moi avons un peu de mal... Il fallait d'abord codé nos mots de passe dans la base avant de pouvoir le faire dans notre AuthController.... Donc en fait maintenant qu'on a codé notre mot de passe dès la création ainsi qu'à la modification, on a réussi wink Enfin moi du moins, puisque Zantetsu a encore du mal à faire fonctionner son code hmm

Encore merci à vous wink

Je mets ce que j'ai fait pour les personnes qui viendraient après nous pour avoir quelque chose qui marche tongue

Dans mon AuthController.php , mon action loginAction()

Code:

 $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
              $authAdapter->setTableName('users')
                        ->setIdentityColumn('login')
                        ->setCredentialColumn('password')
                        ->setIdentity($login)
                        ->setCredential($password)
                        ->setCredentialTreatment('MD5(?)');            
            
                // do the authentication
                $auth = Zend_Auth::getInstance();
                $result = $auth->authenticate($authAdapter);

Et voilà dans mes actions ajouterAction() et modifierAction() de mon AdminController et dans mon ajouterAction() de mon AuthController, avec ça normalement ça fonctionne ^^

Code:

                $password = $form->getValue('password');
                $password = md5($password);
                $row->password = $password;

Encore merci à vous! wink

Hors ligne

 

#13 06-01-2009 11:07:51

zantetsu
Membre
Date d'inscription: 05-01-2009
Messages: 15

Re: [Résolu]Crypter son mot de passe dans la base de données

ui chim a raison, j'ai encore du mal, mais j'ai compris pkoi.

en faite. l'action marche mais uniquement sur les mdp hashé, et donc vu que mon identifiant admin était encore en  "dur"  il ne se loguais pas alors que l'utilisateur X oui.

en espérant que ce topic aidera d'autre "débutant" (ou autres) comme nous xD

voila, merci de l'aide apporté smile

Hors ligne

 

#14 06-01-2009 22:47:29

mdelanno
Membre
Lieu: Nord
Date d'inscription: 26-08-2007
Messages: 90
Site web

Re: [Résolu]Crypter son mot de passe dans la base de données

Nikkau a écrit:

A noter qu'hasher les pass c'est bien, mais en md5 ça sert plus à rien aujourd'hui.

En même temps, casser du MD5 c'est pas si simple et rapide que ça. Il suffit de jeter un coup d'oeil à ce document : http://web.archive.org/web/200706042057 … attack.pdf pour s'en convaincre. Alors si tu ne travailles pas à la CIA, un MD5 sera bien suffisant...

Hors ligne

 

#15 07-01-2009 09:29:42

Guillhomme
Membre
Date d'inscription: 09-10-2008
Messages: 102

Re: [Résolu]Crypter son mot de passe dans la base de données

Noté que votre mot de pass DOIT etre melangé avec des nombres, des sites possèdent une tres grande base de donnéees ( http://www.authsecu.com/decrypter-dechi … sh-md5.php avec 500 millions ) de combinaisons possible pour un MD5, plus votre mot de passe sera complexe, moins il aura de chance d'etre trouvé, mais je crois qu'il est preferable d'utiliser le SHA1.

Hors ligne

 

#16 07-01-2009 10:39:07

Chim
Membre
Date d'inscription: 24-12-2008
Messages: 34

Re: [Résolu]Crypter son mot de passe dans la base de données

Comme nous faisons un site intranet, je ne pense pas que des malotrus viendront essayer de nous décrypter nos mots de passe ^^

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages