Nee, irgendein Hashwert meinetwegen per Mail, der nach einer bestimmten Zeit verfällt.
Peter
Probleme bei der Passwortverifizierung
Einklappen
X
-
Aber bitte nicht für Passwörter.Zitat von Kropff Beitrag anzeigenArbeite ggf. mit md5, das ist statisch.
Einen Kommentar schreiben:
-
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 Abfrageabsoluter 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.Code:SELECT * FROM BenutzerTabelle
Gruß
Peter
Einen Kommentar schreiben:
-
-
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($passwort2, PASSWORD_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);
}
?>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.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>
Auch
schlägt fehl.PHP-Code:if (password_verify($passwortdb, $hash){
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
Einen Kommentar schreiben: