Passwort neu generieren?

2Pac

Erfahrenes Mitglied
Hallo,

ich brauche ein Script zum Passwort ändern in der Datenbank.

Hab mir da folgendes gedacht:

Ich erstell ich mir eine Tabelle Validation:
Spalte1: ID
Spalte2: E-Mail
Spalte3: neuesPW
Spalte4: code

Drückt der User nun auf PW vergessen, wird er aufgefordert, die E-Mail-Adresse einzugeben. Es wird ein Datensatz mit einem zufälligen Code erstellt. Kontrolle ob Code bereits vorhanden.

Wenn nein -> Link an die Mail-Adresse senden:

PHP:
$nachricht = "http://www.domain.de/index.php?section=Validation&code=$code"; 

$absender = "Webmaster@provider.de";
$empfaenger = $email; 
$betreff = "Stadtbau4u: Passwort vergessen"; 

mail($empfaenger, $betreff, $nachricht, "From: $absender\nContent-Type: text/html");

Nun bekommt der jenige die Email mit dem Link.
Auf diesem kontrolliere ich auf den Code nach Datenbank und lösche Datensatz.

User kann selbst neues Passwort eingeben.
-> Passwort wird geändert.

Meint Ihr das Script wäre so sicher?
Wie schaffe ich das ich solange ein zufälliges PW generieren, bis es dieses nicht in der Datenbank gibt. (Kann ja rein theoretisch sein, dass es zufällig schon mal zufällig erzeugt wurde?)

Wäre für eure Meinungen dankbar.
Gruß Ronny
 
Nein, das meinte ich nicht. Ich meinte, dass du eine weitere Variable in deinen Link einbeziehst und in deiner Tabelle auch noch eine neue Spalte email hinzufügst. Dann müsste dein Link so oder mit anderen Werten aussehen:

http://www.domain.de/index.php?section=Validation&code=123456&email=test@web.de
 
Passwort vergessen und Passwort ändern sollten 2 getrennte Funktionen sein.

Vergessen = Formular zum E-Mail eingeben -> zugehöriges Passwort aus Datenbank suchen -> E-Mail mit Passwort senden, Datenbank bleibt unverändert.

Ändern = Login via Session oder Cookie, Formular zur Eingabe des neuen Passworts (oder auch gleich zum Ändern aller Userdaten), Datenbank mit neuen Daten updaten.
 
Warum muss das PW so sein, dass es sonst nicht in der DB vorhanden ist?
Beim PW ist das vollkommen egal, ich bezweifel, dass jemand sein neu generierstes PW nimmt und bei jedem Acc ausprobiert den er kennt....

Das mit dem Code wäre da wichtiger, ich persönlich würde die Email verändern, das @ rausnehmen und das ganze noch ein bisschen mit Zahlen + Groß-/Kleinschreibung verschönern. Dann noch einen Code davor/dahinter/mittenrein und fertig ist dein Kuchen.

Vergessen = Formular zum E-Mail eingeben -> zugehöriges Passwort aus Datenbank suchen -> E-Mail mit Passwort senden, Datenbank bleibt unverändert.

Das sollte nicht möglich sein, wenn man das PW zuschicken kann, wäre es in Klartext gespeichert. Sollte aber unter allen Umständen der Sicherheit willen nicht so sein!
 
Zuletzt bearbeitet:
an Thomasio: Ich würde niemals ein Passwort direkt in einer E-Mail versenden, da dieser Weg nicht sicher ist. Lieber einen temporären Link versenden, der dich dann zu einer Seite verweist auf der du dann dein Passwort siehst.
 
Passwort vergessen und Passwort ändern sollten 2 getrennte Funktionen sein.

Vergessen = Formular zum E-Mail eingeben -> zugehöriges Passwort aus Datenbank suchen -> E-Mail mit Passwort senden, Datenbank bleibt unverändert.

Ändern = Login via Session oder Cookie, Formular zur Eingabe des neuen Passworts (oder auch gleich zum Ändern aller Userdaten), Datenbank mit neuen Daten updaten.
Weil es viel zu unsicher ist? Wer speichert denn bitte ein PW ohne einen Hash in der Datenbank...

@ CookieBuster:

Ich glaube du hast mich missverstanden. Das PW darf schon in der Datenbank sein. Nur soll mein Generierter Code nicht in der Datenbank vorhanden sein :)

Aber mit dem zusatz email im Link sollte sich das Problem erübrigt haben.

Danke nochmal an einfach nur crack ;)
 
PHP:
$pw_string = md5((string)mt_rand() . $_SERVER['REMOTE_ADDR']);
$password = substr($pw_string, 5, 10); // ggf. gekürzt

Kannst Du ja noch beliebig mit Email, Zeit usw. erweitern, wirklich schwer vorstellbar, das es dass zweimal gibt ;-)
 
Zurück