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

Symfony PHP Discussion :

sfDoctrineGuardPlugin et hashage de mot de passe [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Par défaut sfDoctrineGuardPlugin et hashage de mot de passe
    Bonjour,
    j'ai installé sfDoctrineGuardPlugin et personnalisé les actions sfGuardAuth comme indiqué au paragraphe "Customize sfGuardAuth module actions" de la documentation du plugin. C'est notamment pour vérifier que le compte a été activé, que l'utilisateur n'a pas été banni, etc. Mais l'authentification me pose des problèmes. Voici un portion du configure de mon formulaire signin
    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
     
    $this->setValidators(array(
    			'password'			=> new sfValidatorString(
    										array('required' => true),
    										array('required' => 'Vous devez fournir votre mot de passe')					   
    									);
     
    $this->validatorSchema->setPostValidator(
    			new sfValidatorCallback(array('callback' => array($this, 'checkLogin')))										 
    		);
     
    public function checkLogin($validator, $values)
      {
    	  if ($membre->getPassword() != md5($values['password']))
    	  {
    		  // Mot de passe incorrect
    		  throw new sfValidatorError($validator, 'Mot de passe incorrect.');
    	  }
      }
    Moi j'ai pensé que pour crypter les mots de passe, sfGuard utiliser la fonction md5, mais ca me renvoie toujours "mot de passe incorrect". Quelqu'un sait comment les mots de passe sont cryptés dans sfGuard ? où md5 donne-t-il des résultats différents sur une même chaîne ? Merci de vos réponses.

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 100
    Par défaut
    Salut,

    Alors pour doctrine guard plugin, tu as déjà une fonction toute faite pour vérifier le mot de passe. Cette fonction est 'executeSignin' qui est dans 'plugins/sfDoctrineGuardPlugin/modules/sfGuardAuth/lib/BasesfGuardAuthActions.class.php'

    Tu peut t'en inspirer pour réécrire ton action de connection.

    Ensuite pour faire beaucoup plus simple pour l'indentification, tu peut modifier l'option 'is_secure' dans tes fichiers 'security.yml'

    Si jamais tu met 'is_secure' à 'true', symfony va vérifier tout seul si l'utilisateur est connecté, et si il ne l'est pas, il va afficher la page de login.

    Donc pour résumer tu as deux possibilités :
    • simplement activer le module 'sfGuardAuth' dans l'application ou tu doit identifier l'utilisateur et mettre le paramètre 'is_secure' à true. Comme ca même pas besoin de réecrire la fonction de vérification du mot de passe, ...
    • Tu peut surcharger la classe sfGuardAuthActions, mais à ce moment la tu réécrit un peu la roue, ce qui n'est pas nécessaire AMHA


    J'espere que j'ai pu t'aider,

    Inarius

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 58
    Par défaut
    En complément d'information :
    Vas simplement voir à quoi ressemble les données enregistrés par sfGuard dans ta bdd : tu peux voir un champs "algorithm" qui contient le nom de l'algo de cryptage utilisé pour le user.
    Par défaut, c'est sha1.
    En + de ca, sfGuard utilise un système de grain de sable (champ salt dans la bdd) pour rendre le craquage du mot de passe plus difficile, blablabla, jvais pas te faire un cours sur la sécurité

  4. #4
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Par défaut
    D'après mes recherches, le mot de passe est crypté non seulement avec la valeur entrée, mais aussi avec la valeur des username, de l'email et du timestamp de l'inscription, si bien que le reconstituer par soi à partir de la seule valeur entrée par l'utilisateur est pratiquement impossible. J'ai du créer un autre champ de password ou j'entre les mots de passe uniquement hashé avec md5.

  5. #5
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Précision sur le langage assez importante : quand on chiffre, on effectue un cryptage, le but est de transformer le message de telle sorte qu'on puisse le récupérer (exemple : Rijndael/AES) ; quand on hashe, on ne veut qu'une empreinte unique, on ne veut en aucun cas retrouver l'original (exemples : SHA-1, MD4, MD5). Maintenant, utiliser du MD5... c'est mal. C'est très mal. Il n'est plus, cryptographiquement parlant, considéré comme sûr depuis 2004. Voir à ce sujet Wikipedia, par exemple, ainsi que ses références. Utiliser du SHA1, disponible en standard dans PHP (sha1() au lieu de md5()), est nettement meilleur.

    Et là... je remarque que tu souhaites récupérer les mots de passe de tes utilisateurs ?! Tout est prévu justement pour l'éviter !

    Si tu veux bannir des utilisateurs, il doit être possible d'avoir quelque chose de http://www.symfony-project.org/plugi...ineApplyPlugin. Un utilisateur non confirmé ne peut pas se logger. Tu dois pouvoir te baser sur ce qu'ils font. Ils mettent d'ailleurs de base l'activation, ce que tu recherches ! Ne recode pas toi-même ce qui existe déjà, ça s'appelle réinventer la roue et ça a pour synonyme "perte de temps".
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  6. #6
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 260
    Par défaut
    Je suis entièrement d'accord. Si on doit réinventer la roue, mieux vaut ne pas utiliser symfony. Je n'avais pas connaissance de ce plugin. J'y jette un coup d'oeil en attendant. A bientôt.

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

Discussions similaires

  1. hashage de mots de passe incorrect
    Par supcomingenieur dans le forum Langage
    Réponses: 3
    Dernier message: 30/05/2013, 18h04
  2. Réponses: 1
    Dernier message: 17/08/2012, 13h23
  3. Hashage de mot de passe en SHA-1
    Par Yoann.chambonnet dans le forum Spring
    Réponses: 1
    Dernier message: 29/09/2009, 16h03
  4. [Security] Implémentation de UserDetailsService et hashage du mot de passe
    Par Treydone dans le forum Spring
    Réponses: 2
    Dernier message: 02/09/2009, 20h26
  5. Sécurité BDD, hashage des mots de passe
    Par Link3 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 12/10/2006, 18h39

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