IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

Formulaire et cryptage des mots de passe : erreur etrange [CakePHP]


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut Formulaire et cryptage des mots de passe : erreur etrange
    Salut a tous,

    bon je suis passé en v 1.2.5 de cake et j'ai quelques soucis.

    En effet j'ai un formulaire d'inscription avec un mot de passe et sa confirmation, le problème c'est que ledit champs est crypté automatiquement donc en cas d'erreur on reaffiche le formulaire mais il contient le mdp crypté donc ça ne va plus ...

    Pour y remédier j'ai voulu crypter le mot de passe juste avant l'entrée en base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    function inscription() {
          $this->Client->unbindModel(array('hasMany' => array('Commande')));
          //Si le formulaire a été posté
          if(!empty($this->data)) {
             //Créaton du client
             $this->Client->create($this->data);
             //Validation des données
             if(!$this->Client->validates()) {            
                $this->validateErrors($this->Client);            
             }
             else {            
                $mdp = $this->data['Client']['mot_de_passe'];            
                // Nettoyage de la saisie
                App::import('Sanitize');
                $this->data['Client']['mot_de_passe'] = Security::hash($this->data['Client']['mot_de_passe']);
                $this->data['Client']['confirmer_mot_de_passe'] = Security::hash($this->data['Client']['confirmer_mot_de_passe']);
                debug($this->data);
                $this->data = Sanitize::clean($this->data);
                //Hashage du mot de passe avant entrée BDD            
                if($this->Client->save($this->data)) {
                   $this->Flash("Membre enregistré correctement.", '/clients');               
                   //Envoyer un email de confirmation
                   $this->_envoiMailNouvelUtilisateur($this->data['Client']['adresse_mail'],$mdp);               
                }
                else
                    $this->log("Client::inscription echec de la sauvegarde");
             }
          }
       }
    Maintenant j'ai 2 problèmes :

    - Le mdp ne correspond jamais a sa confirmation car il est crypté quand meme ....
    - Il ne devrait pas se crypter avant l'entrée en base ...donc il semble y avoir une double vérification..

    Au passage je précise que j'ai le problème avec la version 1.2.5 (qui d'ailleurs en a d'autre comme la fonction unbindmodel() qui ne fonctionne plus ...)

    merci de votre aide

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    Je te conseille de regarder cette page pour voir comment hasher ton mdp proprement et gerer une confirmation de mot de passe : http://book.cakephp.org/fr/view/565/...-Auth-Problems

    Oui le composant Auth crypte automatiquement le mot de passe de maniere totalement transparente. C'est plutot sympa, mais en effet en cas d'erreur de validation du formulaire cela affiche un mot de passe hashe dans le champ ...
    Voici 2 solutions pour contourner ca :
    1 - Toujours afficher des champs mot de passe vides
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Vue
    $form->input('password', array(
       'value' => ''));
    2 - Utiliser un autre nom pour ton champ de formulaire (e.g "password_clair") et dans le controlleur le crypter avant la sauvegarde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // Controlleur
    function inscription() {
       if (!empty($this->data)) {
          // Ajouter aussi la comparaison entre password_clair et confirmation ?
          $this->data['User']['password'] == $this->Auth->password($this->data['User']['password_clair'];
          if ($this->User->save($this->data)) {
             // [...]
          }
    C'est a peu pres tout ce que tu as a faire ... ne te compliques pas trop la vie !

  3. #3
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    J'avais déjà vu la page en question, le soucis c'est que je dois vérifier la double saisie donc en cas d'erreur je fais comment ?

  4. #4
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    trouvé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $this->Client->invalidate('confirmer_mot_de_passe');
    à toi

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par RideKick Voir le message
    J'avais déjà vu la page en question, le soucis c'est que je dois vérifier la double saisie donc en cas d'erreur je fais comment ?
    Si tu le fais depuis le controlleur, "invalidate" fait l'affaire ... mais en regle generale il sufft d'ajouter une regle de validation dans le modele et le tour est joue aussi. Cela ne depend que de l'interpretation que l'on en fait, pour savoir si le code doit etre place dans le controlleur ou dans le modele

  6. #6
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    Justement je suis parti du modèle avec la règle de validation pour contrôler si le mot de passe est bien vérifie mais j'avais le problème cité.
    En passant par le controlleur, je n'ai plus de problème

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL-Server] Cryptage des mots de passes
    Par BYALI dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 24/06/2010, 16h09
  2. Django et cryptage des mots de passe des utilisateurs
    Par soitdipo dans le forum Django
    Réponses: 1
    Dernier message: 24/01/2008, 17h38
  3. Cryptage des mot de passe dans Tomcat
    Par kedare dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 19/06/2006, 16h49
  4. [Sécurité] Cryptage des mots de passe
    Par franfr57 dans le forum Langage
    Réponses: 9
    Dernier message: 25/04/2006, 14h04
  5. Cryptage des mots de passe en shell
    Par melmouj dans le forum Linux
    Réponses: 7
    Dernier message: 05/04/2006, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo