Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
re bonjour, c'est encore moi
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é.
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 ?
$password = new Zend_Form_Element_Password('password'); $password->setLabel('Password :') ->setRequired(true) ->addValidator('NotEmpty');
voila, si quelqu'un pouvait m'aider, ça serait sympa
Dernière modification par Chim (06-01-2009 11:10:39)
Hors ligne
Essaye ca :
->setCredentialTreatment("MD5(?)");
Dernière modification par alien7 (05-01-2009 17:54:56)
Hors ligne
Tu peux le crypter avant, directement en PHP, c'est ce que je fais, et y a pas de souci.
Hors ligne
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
Hors ligne
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
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).
$authAdapter->setTableName('membres') ->setIdentityColumn('username') ->setCredentialColumn('password') ->setCredentialTreatment('MD5(?)') ->setIdentity($username) ->setCredential($password);
Hors ligne
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 :
->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+
Hors ligne
effectivement oui, c'est en faisant un md5($password) juste avant le code de traitement à la base.
Hors ligne
A noter qu'hasher les pass c'est bien, mais en md5 ça sert plus à rien aujourd'hui.
Hors ligne
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
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
T'as essaye tout simplement de faire ?
$password = md5($password);
Sinon essaye de rajouter le logger pour les requetes SQL dans Firebug, tu verras plus facilement d'ou ca vient
Hors ligne
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 Enfin moi du moins, puisque Zantetsu a encore du mal à faire fonctionner son code
Encore merci à vous
Je mets ce que j'ai fait pour les personnes qui viendraient après nous pour avoir quelque chose qui marche
Dans mon AuthController.php , mon action loginAction()
$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 ^^
$password = $form->getValue('password'); $password = md5($password); $row->password = $password;
Encore merci à vous!
Hors ligne
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é
Hors ligne
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
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
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
Pages: 1