Probleme bei der Passwortverifizierung

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

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

    Peter

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • Kropff
    antwortet
    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

    Einen Kommentar schreiben:


  • hausl78
    antwortet
    X-Post: https://www.php.de/forum/webentwickl...-der-hashwerte

    Einen Kommentar schreiben:


  • Diani
    hat ein Thema erstellt Probleme bei der Passwortverifizierung.

    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
Lädt...
X