Probleme bei der Passwortverifizierung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme bei der Passwortverifizierung

    Hallo Leute,


    ich habe ein Problem damit eine Passwortabfrage durchzuführen, um anschließend das Passwort ändern zu lassen. Nachfolgend die betreffende PHP-Datei mit HMTL-Formular.



    PHP-Code:
    <?php

    session_start
    ();

    if(!isset(
    $_SESSION['userid'])) {
        
    header("Location: http://www.example.de/login.php");
    }

    error_reporting(E_ALL);
    ini_set("display_errors"1);

    include(
    'config.inc.php');
    $userid $_SESSION['userid'];

    date_default_timezone_set("Europe/Berlin");
    $timestamp time();
    $changed date("Y-m-d - H:i:s",$timestamp);

    if (isset(
    $_POST["gesendet"])) {
        
    $con mysqli_connect($db_server$db_dbuser$db_dbpasswd);
        
    mysqli_select_db($con$db_dbname);

        
    $passwort1 $_POST["passwort1"];
        
    $passwort2 $_POST["passwort2"];
        
    $hash password_hash($passwort2PASSWORD_DEFAULT);

        
    //Überprüfung des Passworts
        
    $res mysqli_query($con"SELECT * FROM BenutzerTabelle");
        
    $num mysqli_num_rows($res);
        while (
    $dsatz mysqli_fetch_assoc($res))
        {
            
    $passwortdb $dsatz["passwort"];
        }
        
    $passwortakt $_POST["passwortakt"];

        if (
    $passwortdb == $hash){
            echo 
    "<div class=\"alert alert-success\" role=\"alert\">";
            echo 
    "<b>Ihr Passwort wurde erfolgreich geändert!</b>";
            echo 
    "</div>";
        } else {
            echo 
    "<div class=\"alert alert-danger\" role=\"alert\">";
            echo 
    "<b>Ihr Passwort stimmt nicht! </b>";
            echo 
    "<br> $passwortdb = $hash ";
            echo 
    "</div>";
        }

        
    //Setzen des neuen Passworts
       
    if ($passwort1 ==  $passwort2) {
            
    $sql "UPDATE BenutzerTabelle SET passwort = '$hash', updated_at = '$changed' WHERE uid = '$userid'";
            
    mysqli_query($con$sql);

            
    $num mysqli_affected_rows($con);
            if (
    $num>0)
            {
                echo 
    "<div class=\"alert alert-success\" role=\"alert\">";
                echo 
    "<b>Ihr Passwort wurde erfolgreich geändert!</b>";
                echo 
    "</div>";
            }
            else
            {
                echo 
    "<div class=\"alert alert-danger\" role=\"alert\">";
                echo 
    "<b>Es ist ein Fehler aufgetreten, ";
                echo 
    "das Passwort konnte nicht geändert werden!</b>"
                
    echo "</div>";
            }
        } else {
            echo 
    "<div class=\"alert alert-danger\" role=\"alert\">";
            echo 
    "<b>Die beiden Passwörter sind nicht identisch! </b>";
            echo 
    "</div>";
        }
        
        
    mysqli_close($con);
    }


    ?>
    HTML-Code:
    <form action = "changePassword.php" method = "post">
        <div class="col-md-4">
            <div class="form-group">
                <label for="passwortakt" class="custom-control-label">Aktuelles Passwort</label>
                <input type="password" class="form-control" size="40"  maxlength="250" name="passwortakt">
            </div>
            <div class="form-group">
                <label for="passwort1" class="custom-control-label">Neues Passwort</label>
                <input type="password" class="form-control" size="40"  maxlength="250" name="passwort1">
            </div>
            <div class="form-group">
                <label for="passwort2" class="custom-control-label">Passwort wiederholen</label>
                <input type="password" class="form-control" size="40"  maxlength="250" name="passwort2">
            </div>
        </div>
            <input class="btn btn-primary" type="submit" name="gesendet" value="Passwort ändern"/>
        </div>
    </form>
    Das Ganze scheitert bei "if ($passwortdb == $hash)" hier wird der Hashwert aus der Datenbank, den ich mit "$hash = password_hash($passwort, PASSWORD_DEFAULT);" in einem anderen Script zur User-Generierung erzeugt hatte. Die Benutzer können sich auch einloggen und haben dann auch eine Session-ID.

    Auch

    PHP-Code:
    if (password_verify($passwortdb$hash){ 
    schlägt fehl.

    Irgendwie erzeugt password_hash() keinen identischen Hashwert mit demselben Passwort.
    Gibt dazu eine Lösung oder eine andere Möglichkeit der Passwortverifierung?

    Vielen Dank

    Diani

  • #2
    X-Post: https://www.php.de/forum/webentwickl...-der-hashwerte

    Kommentar


    • #3
      password_hash erzeugt bei jedem Aufruf einen neuen Wert, ein Abgleich mit einem alten kann daher nicht funktionieren. Arbeite ggf. mit md5, das ist statisch. Außerdem ist die Abfrage
      Code:
      SELECT * FROM BenutzerTabelle
      absoluter tinnef, weil du alle Datensätze holst und dann den letzten davon zur Überprüfung nimmst. Von den anderen Sünden will ich erst gar nicht reden.

      Gruß
      Peter
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #4
        Zitat von Kropff Beitrag anzeigen
        Arbeite ggf. mit md5, das ist statisch.
        Aber bitte nicht für Passwörter.

        Kommentar


        • #5
          Nee, irgendein Hashwert meinetwegen per Mail, der nach einer bestimmten Zeit verfällt.

          Peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar

          Lädt...
          X