Passwortänderung im Frontend

Gesperrt
mgi
Beiträge: 5
Registriert: Mi 6. Okt 2004, 07:37
Kontaktdaten:

Passwortänderung im Frontend

Beitrag von mgi »

Hallo

Ich stand vor folgendem Problem: In der Website eines Vereins sollte ein passwortgeschützter Bereich für die Mitglieder eingerichtet werden. Die Änderung des Passwortes sollte direkt im Frontend möglich sein, damit die URL des Backends nicht publiziert werden muss.

Ich habe mir folgendes kleine Modul gebastelt - ich möchte gerne Feedback einholen, da es erst etwa das dritte php-Skript ist, das ich je geschrieben habe. Mich interessiert vor allem, ob ich irgendwelche Sicherheitslücken übersehen habe.

Nachdem das Mitglied sich mit dem normalen Login-Modul eingewählt hat, kann er oder sie im Mitgliederbereich den Menüpunkt "Passwort ändern" anklicken. Anschliessend wird eine Seite mit folgendem Modul aufgerufen (Nur Output, kein Input):

Code: Alles auswählen

<?php

//Username gemäss Login ermitteln
$name_login=$auth->auth[uname];

if($sent!="1"){ 

//Formular zur Passwortänderung ausgeben
//mit zwei Eingabefeldern: Passwort und
//Bestätigung des Passworts

echo '<form action='.$auth->url().' method="POST"><input type="hidden" name="sent" value="1">';
echo '<TABLE border=0><TBODY><TR><TD width=150>Benutzername</TD><TD width=250>'.$name_login.'</TD></TR>';
echo '<tr><td>Neues Passwort</td><td><input name="passwort1" type="password" size="24" maxlength="24"></td></tr>';
echo '<tr><td>Neues Passwort wiederholen</td><td><input name="passwort2" type="password" size="24" maxlength="24"></td></tr>';
echo '<tr><td></td><td><INPUT type=submit value="Passwort ändern"></td></tr></TBODY></TABLE></form>';


}else{

// Es wird geprüft, ob neues Passwort
//und Bestätigung übereinstimmen
//Falls nicht, kann Benutzer wieder zum
//Formular zurückkehren

if($passwort1!=$passwort2){

$sent="0";
echo '<b><font color=#ff0000>Warnung: Passwort nicht geändert</font></b><br><br>Das neue Passwort und dessen Bestätigung stimmten nicht überein.<br><br>';
echo 'Bitte versuchen Sie es noch einmal: <a href='.$auth->url().'>Passwort ändern</a>';

}else{

//Es wird geprüft, ob überhaupt eine Eingabe erfolgte
//Wenn die Länge des Passworts 0 Zeichen ist, wird
//abgebrochen und der Benutzer kann zum
//Formular zurückkehren 
//Man könnte hier auch eine Mindestlänge von x
//Zeichen erzwingen

$laenge = strlen($passwort1);

if($laenge == 0){

$sent="0";
echo '<b><font color=#ff0000>Warnung: Passwort nicht geändert</font></b><br><br>Sie haben kein neues Passwort eingegeben. Das bisherige Passwort bleibt weiterhin gültig.<br><br>';
echo 'Bitte versuchen Sie es noch einmal: <a href='.$auth->url().'>Passwort ändern</a>';


}else{

//md5 Wert des Passwortes berechnen und in Datenbank schreiben

$passwort_md5=md5($passwort1);

$db_login = new DB_Contenido;
$sql = "UPDATE ".$cfg['tab']['phplib_auth_user_md5']." SET password='".$passwort_md5."' WHERE username='".$name_login."'";
$db_login->query($sql); 

echo 'Passwort erfolgreich geändert';

}}}

?>
Das Ding funktioniert soweit und einzelne Mitglieder haben auch tatsächlich schon erfolgreich das Passwort geändert.

Und trotzdem nagt in mir der Zweifel, ob ich nicht irgendeine kritische Sicherheitssache übersehen habe... zum Beispiel würde ich für den Mitgliederbereich gerne auf https wechseln, habe aber noch nicht rausgefunden, wie ich das auf triviale Weise regeln kann.

Danke für Feedback
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

nun ja ich würd noch die überprüfung einbauen wie das alte passwort gelautet hat und das mit dem gespeicherten md5 wert vergleichen...
erst dann würd ich die änderung zulassen...

sonst siehts eh ganz nett aus...
*** make your own tools (wishlist :: thx)
Gesperrt