Partage
  • Partager sur Facebook
  • Partager sur Twitter

"Erreur" dans cours PHP

    4 janvier 2018 à 20:59:42

    Bonjour,

    je me permet de remonter une "erreur" sauf ... de ma part. Humm

    dans le lien ci-dessous :

    https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/tp-creer-un-espace-membres#/id/r-2178970

    dans le code 'vérification des identifiants', l'auteur utilise une vérification identique à l'aide  de password_hash mais cette fonction renvoi systématiquement une valeur différente ce qui empêche le script d'être exploité, je pense qu'il faut utiliser password_verify.

    bien à vous

    • Partager sur Facebook
    • Partager sur Twitter
      4 janvier 2018 à 22:02:59

      Correct. Ils ont "bêtement" substitué un sha1 ou je ne sais quoi par password_hash or c'est faux car le grain de sel généré lors de l'appel à password_hash étant différent, deux invocations de password_hash, avec les mêmes paramètres, a une improbable chance de générer le même hash.

      1) le texte qui dit qu'il suffit de comparer 2 résultats de password_hash n'est plus d'actualité

      > Lorsqu'un visiteur voudra se connecter, il vous enverra son mot de passe que vous hacherez à nouveau et que vous comparerez avec celui stocké dans la base de données. Si les deux mots de passe hachés sont identiques, alors cela signifie que le visiteur a rentré le même mot de passe que lors de son inscription.

      2) le code doit être adapté :

      • supprimer AND pass = :pass de la requête SELECT
      • du coup retirer le bind de :pass (soit la partie 'pass' => $pass_hache)
      • changer le SELECT id FROM en SELECT id, pass FROM - à moins d'un SELECT * FROM
      • virer la ligne $pass_hache = password_hash($_POST['pass'], PASSWORD_DEFAULT);
      • enfin faire intervenir password_verify : if (!$resultat) devient if (!$resultat || !password_verify($_POST['pass'], $resultat['pass']))

      EDIT : le cours a été corrigé mais le code aurait pu être bien meilleur :

      • le password_verify aurait pu être déplacé dans le else : inutile de tenter un password_verify si la requête ne renvoie rien. Heureusement que PHP renvoie NULL pour FALSE['pass'] et que password_verify accepte vraisemblablement NULL (puis cast vers string) sans lever la moindre erreur.
      • la répétition du message d'erreur ("Mauvais identifiant ou mot de passe !") aurait pu être évitée via un ou logique comme proposé dans ce même post

      -
      Edité par julp 25 juin 2018 à 23:13:55

      • Partager sur Facebook
      • Partager sur Twitter
        8 février 2018 à 14:06:28

        Hello,

        je fais remonter le sujet car depuis 1 semaine, j'ai corrigé 5 fois sur des questions dans le forum PHP, et julp ne les compte pas ^^

        Quand pensez-vous faire cette modification, car là il va y avoir un effet boule de neige monstrueux si (non pas si, comme) personne ne lis les doc.

        Merci.

        • Partager sur Facebook
        • Partager sur Twitter
          8 février 2018 à 14:20:18

          Hello,

          Ah oui, bien vu...

          Peut-être faire la demande à un modo ou envoyer un directement un MP à NoraLeon1 ;) 

          -> Social Media Manager d'OpenClassrooms

          -
          Edité par Lucky13 8 février 2018 à 14:22:13

          • Partager sur Facebook
          • Partager sur Twitter
            9 février 2018 à 20:40:39

            Bonsoir, pouvez vous postez tous le code corrigé svp. J'ai du mal à corriger comme vous avez dit. Je vous remercie.
            • Partager sur Facebook
            • Partager sur Twitter
              2 décembre 2019 à 18:49:54

              @OC

              > PHP 7.4 UPGRADE NOTES

              > Trying to use values of type null, bool, int, float or resource as an array (such as $null["key"]) will now generate a notice.

              Etant donné que PHP >= 7.4.0 lève à présent une notice avec l'éventuel FALSE['pass'] vu que le password_verify est fait avant d'avoir vérifié qu'une ligne est bien renvoyée (ie que if (!$resultat) est vrai) au lieu d'après, serait-il donc possible de (re)corriger le cours (et si possible en évitant la répétition du echo 'Mauvais identifiant ou mot de passe !';) ?

              Au minimum déplacer la ligne 10 en début du premier else quoi.

              -
              Edité par julp 2 décembre 2019 à 21:11:59

              • Partager sur Facebook
              • Partager sur Twitter
                14 juin 2021 à 12:01:20 - Message modéré pour le motif suivant : Merci de créer votre propre sujet


                "Erreur" dans cours PHP

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                • Editeur
                • Markdown