Hallo könnte mal bitte jemand drüber schauen, und mir sagen, warum das neue Passwort nicht in die Datenbank geschrieben wird?
PHP-CODE:
<?php
session_start();
include("config.inc.php");
include("header.php");
if($_POST['newpass']==$_POST['newpass2']&& $_POST['newpass']>5 && $_POST['newpass2']>5) {
$db->query("UPDATE k_user SET passwort='".$newpass."' WHERE u_id='".$_SESSION['u_id']."'");
echo 'Passwort wurde erfolgreich geändert!';
}
else{
print "<div id='fehler'><img src=\"Bilder/error.png\"> Das Passwort muss min. 5 Zeichen lang sein!</div>";
?>
<center>
<table>
<tr><td><form method="post" action="changePass2.php"><br> </td></tr>
<tr><td><label>Altes Passwort: </label><td><input name="oldpass" type="password" id="oldpass"><br></td></td></tr>
<tr><td><label>Neues Passwort: </label><td><input name="newpass" type="password" id="newpass"><br></td></td></tr>
<tr><td><label>Neues Passwort (wiederholen): </label><td><input name="newpass2" type="password" id="newpass2"></td></td></tr>
<tr><td><input name="passaendern" type="submit" id="passaendern" value="Passwort ändern"></td></tr>
</table>
</center>
<?
include("footer.php");
}
?>
In der Datenbank wird das Passwort einfach gelöscht(leer), anstatt das neue Passwort zu aktualisieren.
Vielen Dank für eure Hilfe.
Passwort ändern-Skript
-
-
Ähm, gehört da nichtPHP$db->query("UPDATE k_user SET passwort='".$_POST['newpass']."' WHERE u_id='".$_SESSION['u_id']."'");
So, und jetzt zu ein paar Dingen, die mir da aufgefallen sind:if($_POST['newpass']==$_POST['newpass2']&& $_POST['newpass']>5 && $_POST['newpass2']>5) {
Wenn die zwei Passwörter gleich sind (und nur dann besteht die Möglichkeit, dass $_POST['newpass2']>5 ausgewertet wird), ist $_POST['newpass2'] genau dann länger als fünf Zeichen, wenn $_POST['newpass'] länger als fünf Zeichen lang ist, d.h. die Überprüfung, ob das $_POST['newpass2'] länger als fünf Zeichen ist, kannst du streichen.
$db->query("UPDATE k_user SET passwort='".$newpass."' WHERE u_id='".$_SESSION['u_id']."'");
Böse.
Warum?
- Ich setze mal mein Passwort auf "abc';". Dann haben ab sofort alle Benutzer das Passwort "abc"? Kann ich mich dann als beliebiger User mit diesem Passwort anmelden und beliebigen Unfug anstellen?
- Ich setze mal das Passwort auf "abc'; DROP TABLE k_user;". Ist dann die Tabelle k_user weg?
- Passwörter im Klartext in Datenbanken zu speichern ist böse.
Zu den ersten beiden Punkten: mysql_real_escape_string verwenden.
Zum dritten Punkt: Hashwert (z.B. mit md5 ermittelt) abspeichern. Zur Überprüfung, ob das korrekte Passwort eingegeben wurde, ist die Hashfunktion auf die Eingabe anzuwenden. Dann sind die beiden Hashwerte miteinander zu vergleichen.
-
Danke für die Hinweise..jetzt funktioniert es...Das mit dem Hash5 baue ich später ein
-
Noch besser ist, vor Absenden des Formulars schon md5-hashes (am besten salted, im Stil von CHAP) zu bilden.
Ich hab das schon mal implementiert ... werd mal eine einfach einzubindende Library schreiben...
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!