php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Probleme bei der Passwortverifizierung


 
Diani
10-12-2018, 08:51 
 
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

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);
}


?>
<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

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

 
hausl78
11-12-2018, 11:32 
 
X-Post: https://www.php.de/forum/webentwicklung/php-einsteiger/1544213-probleme-bei-dem-abgleich-der-hashwerte

 
Kropff
11-12-2018, 21:10 
 
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 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

 
h3ll
11-12-2018, 21:12 
 
Arbeite ggf. mit md5, das ist statisch.

Aber bitte nicht für Passwörter.

 
Kropff
11-12-2018, 22:15 
 
Nee, irgendein Hashwert meinetwegen per Mail, der nach einer bestimmten Zeit verfällt.

Peter


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:54 Uhr.