Partage
  • Partager sur Facebook
  • Partager sur Twitter

password-verify chez ovh

    8 décembre 2024 à 19:35:37

    BOnjour,

    impossible de connecter un utilisateur à partir des données suivantes

    Table : Champ1 : Utilisateur : Pierre (255)   Password : toto (255)

    Les variables $_POST passent bien.

    Le hash est bien stocké dans la bdd

    Ca en marchait pas avec juste la fonction password_verify,  et j'ai ajouté sur le code suivant la fonction password_need_rehash, et ça ne fonctionne toujours pas....

    La fonction password_verify ne fonctionne pas.... Je ne sais plus quoi faire... une idée ?

    <?
    include "config.inc.php";
      $lg = $_POST["login"];
      $psswrd = $_POST["password"];  
      $verifexist = mysqli_query ($conn,"select* from ALSH_user where username='$lg'");
    $userexist = mysqli_num_rows($verifexist); 
      if ($userexist==0)
      {
      $message = "<p>Utilisateur inconnu</p><p><a href=\"login.php\">Essayer encore</a></p>";
      }
      else
      {
      	while ($testpass=mysqli_fetch_object($verifexist))
    		{
    		$verifpass = $testpass->password;
    		$idunique = $testpass->uniqid;
    		
    		}
    		$new = [
        'algo' => PASSWORD_DEFAULT,
        'hash' => null
    ];
    if (true === password_verify($psswrd,$verifpass))
    {
    	 if (true === password_needs_rehash($verifpass, $new['algo'], $new['options'])) {
            $newHash = password_hash($psswrd, $new['algo']);
            echo "<p> Nouveau hash : $newHash</p>";
       
    setcookie('username',$lg,time() + 3600);
    setcookie('id',$idunique,time() + 3600);
    				
    $message ="<p>Bonjour $lg. Vous êtes bien connecté ! Redirection en cours</p><h2><a href=\"index.php\">Accès à la plate-forme</a></h2>";
    			
    				
    				}
    			 }
    			else
    			
    				{
    					$message ="<p>Bonjour $lg. Il semblerait que ce ne soit pas le bon mot de passe !</p><p><a href=\"login.php\">Réessayer</a></p>";			
    				}
      }
      
    ?>
    



    -
    Edité par GuilhemMercier 8 décembre 2024 à 19:39:04

    • Partager sur Facebook
    • Partager sur Twitter
      9 décembre 2024 à 11:55:43

      > Les variables $_POST passent bien.

      Il n'y a pas le moindre test, même pas le minimum syndical (isset), dessus donc je ne sais pas comment tu peux l'affirmer.

      > j'ai ajouté sur le code suivant la fonction password_need_rehash

      Est-ce que tu sais au moins quel est son but ? Parce que ça n'apportera rien par rapport à ton problème. De plus, il ne sert à rien, tu ne fais pas d'UPDATE pour mettre à jour le hash, tu es juste en train de faire travailler le CPU pour rien.

      > password-verify chez ovh

      Parce qu'en local ou autre environnement de développement ça fonctionne ?

      > La fonction password_verify ne fonctionne pas....

      Justement, le problème est peut être au moment du password_hash

      • Tu as une injection SQL
      • Tu n'as pas besoin d'une boucle (while), tu es censé avoir au plus une ligne
      • Quand vous postez du code, vous pourriez au moins l'indenter correctement qu'on ne galère pas inutilement pour relire votre code ...
      • Tu affiches "redirection en cours" mais il n'y a aucun code pour la réaliser
      • Comment tu veux être "connecté" si tu n'utilises pas de session ?

      EDIT : en fait c'est juste password_needs_rehash qui n'est pas compris/mal utilisé ? Le corps du if correspondant devrait se trouver après/au niveau de celui-ci du password_verify ?

      -
      Edité par julp 9 décembre 2024 à 18:08:38

      • Partager sur Facebook
      • Partager sur Twitter
        9 décembre 2024 à 18:50:26

        Edit : cela fonctionne, j'avais un stripslashes ....

        Merci pour ton aide en tout cas !

        -
        Edité par GuilhemMercier 9 décembre 2024 à 19:08:47

        • Partager sur Facebook
        • Partager sur Twitter
          9 décembre 2024 à 19:02:00

          > je peux tester via un isset

          Ce n'est pas que tu peux, c'est que tu devrais, ne serait-ce que par principe déjà (ne jamais faire confiance à l'utilisateur) + éventuellement les robots qui pourraient te pourrir tes logs.

          > Cependant, je me suis demandé si OVH ne devait pas être configuré ?

          Non :

          • l'extension ne serait pas supportée/active, ça planterait en erreur fatale (call to undefined function ou similaire sur toutes les fonctions password_*)
          • $2y$ c'est du bcrypt, ça ne nécessite pas de bibliothèque/est toujours actif (contrairement à argon2)

          > cela fonctionne sans souci

          Sauf si $password vaut null au password_hash et on ne peut pas le vérifier vu que le hash nous est donné sous forme d'image au lieu de texte. On n'a pas le code [de création du compte + formulaire] avec le password_hash non plus.

          Il y a toujours l'injection SQL : prépare la requête !

              $userexist = mysqli_num_rows($verifexist);
              //verification de l'existence de l'utilisateur, ok
                  if ($userexist==0)
                      {
                      $message = "<p>Utilisateur inconnu</p><p><a href="%5C">Essayer encore</a></p>";
                      }
                  else
                      {
                      //recup du mot dez passe haché dans la base
                      while ($testpass=mysqli_fetch_assoc($verifexist))
                          {
                          $verifpass = $testpass["password"]; // ici je recup le password hashé
                          }
          

          Se réécrit plus proprement :

          if ($user = mysqli_fetch_assoc($verifexist)) {
              if (password_verify($psswrd, $user['password'])) {
                  echo "Bonjour ", htmlspecialchars($user['username']), " Vous êtes bien connecté !"; # echo et session = ce n'est pas censé fonctionner/mauvaise idée
              } else {
                  echo "Mot de passe erroné";
              }
          } else {
              $message = "Utilisateur inconnu";
          }
          

          Voir même normalement :

          if (($user = mysqli_fetch_assoc($verifexist)) &amp;&amp; password_verify($psswrd, $user['password'])) {
              echo "Bonjour ", htmlspecialchars($user['username']), " Vous êtes bien connecté !"; # echo et session = ce n'est pas censé fonctionner/mauvaise idée
          } else {
              $message = "Utilisateur inconnu ou mot de passe erroné";
          }
          

          > cela fonctionne, j'avais un stripslashes ....

          Je ne vois pas comment un stripslashes pouvait altérer le mot de passe "toto" :roll:

          -
          Edité par julp 9 décembre 2024 à 19:23:40

          • Partager sur Facebook
          • Partager sur Twitter

          password-verify chez ovh

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