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
-
tronax -
9. April 2007 um 13:24 -
Unerledigt
das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)
Vielen Dank für die Treue und das Verständnis!
-
-
Ä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... -
Maximilian Rupp
27. Dezember 2024 um 12:05 Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.