Zugang E: Passwort
Setzt ein neues Passwort für den Benutzer oder bietet die Anforderung eines neuen (generischen) Passworts an.
Es wird im Verzeichnis /user/
erwartet, in dem alle Daten für die Zugangskontrolle abgelegt werden.
Das Skript
Stand: 21.10.2022
<?php // Passwort ändern if (isset($_POST["reset"])) { $lname = $_SESSION["benutzername"]; $lpalt = trim($_POST["palt"]); $lpneu1 = trim($_POST["pneu1"]); $lpneu2 = trim($_POST["pneu2"]); if ($lpneu1 <> $lpneu2) { ?> <blockquote><blockquote><blockquote> <p>Das neue Passwort muss zwei Mal <em>identisch</em> eingegeben werden!</p> <p>Änderung wiederholen, ansonsten gilt das <em>alte</em> Passwort.</p> </blockquote></blockquote></blockquote><br/> <?php } else if (pw_strength($lpneu1)) { ?> <blockquote><blockquote><blockquote> <p>Minimale Passwort-Anforderungen:</p> <ul> <li>mindestens einen Großbuchstaben</li> <li>mindestens einen Kleinbuchstaben</li> <li>mindestens eine Zahl</li> <li>mindestens acht Zeichen</li> </ul> <p>Das neu gewählte Passwort verstößt gegen mindestens eine dieser Anforderungen.</p> </blockquote></blockquote></blockquote><br/> <?php } else { $zeilen =explode("\n",file_get_contents($thefile)); $nomatch = "<blockquote><blockquote><blockquote>ALTES Passwort falsch.</blockquote></blockquote></blockquote>"; foreach($zeilen as &$zeile) { // &$zeile → referenziert Inhalt → änderbar //$zeile = preg_replace('/\s+/','',$zeile); // Leerzeichen weg if (strlen($zeile)<4) continue; list($rname,$rpass) = explode(":", $zeile, 2); if ($rname <> $lname) continue; if (($lname === $rname) && (password_verify($lpalt,$rpass))) { $rpass = password_hash($lpneu1,PASSWORD_DEFAULT); $zeile = $rname . ":" . $rpass; $nomatch = "<blockquote><p>Die Änderung war erfolgreich.<br/>Das neue Passwort ist SOFORT gültig.</p></blockquote>"; If (!file_put_contents($thefile,implode("\n",$zeilen), LOCK_EX)) { sleep(1); If (!file_put_contents($thefile,$zeilen, LOCK_EX)) { ?> <blockquote><blockquote><blockquote> <h2>Entschuldigung</h2> <p>Beim Speichern des Passworts ist ein Fehler aufgetreten. Bitte nach einmal versuchen.<br/> Sollte der Fehler mehrfach hintereinander auftreten, bitte das [Kontaktformular](/kontakt) für eine Rückmeldung nutzen.</p> </blockquote></blockquote></blockquote><br/> <?php } } break; } } echo $nomatch; } } // Neues Passwort anfordern if (isset($_POST["new"])) { $lname = $_POST["name"]; $zeilen =explode("\n",file_get_contents($thefile)); $nomatch = "<blockquote><blockquote><blockquote><p>Der angegebene Benutzer ist unbekannt.</p></blockquote></blockquote></blockquote><br/>"; foreach($zeilen as &$zeile) { // &$zeile → referenziert Inhalt → änderbar //$zeile = preg_replace('/\s+/','',$zeile); // Leerzeichen weg if (strlen($zeile)<4) continue; list($rname,$rpass) = explode(":", $zeile, 2); if ($rname <> $lname) continue; if ($lname === $rname) { $lpneu1 = random_str(10); $rpass = password_hash($lpneu1,PASSWORD_DEFAULT); $zeile = $rname . ":" . $rpass; $nomatch = ''; If (file_put_contents($thefile,implode("\n",$zeilen), LOCK_EX)) { $msg = str_replace("??email??", $lname, $msg); $msg = str_replace("??pword??", $lpneu1, $msg); if (mail($lname,$betreff,$msg,implode("\r\n",$headers))) { echo '<blockquote><h2>„Sie haben Post!“</h2><p>Bitte im E-Mail-Postfach nachsehen, dort sollte eine Nachricht zum weiteren Vorgehen vorliegen.</p></blockquote><br/>'; } else { ?> <blockquote><blockquote><blockquote> <h2>Entschuldigung</h2> <p>Aus technischen Gründen kann momentant leider keine Nachricht übermittelt werden.<br/> Bitte in ca. 1 Stunde noch einmal versuchen.</p> </blockquote></blockquote></blockquote><br/>'; <?php } } else { ?> <blockquote><blockquote><blockquote> <p>Bitte Anfrage wiederholen.<br/> Sollte diese Meldung mehrfach kommen, bitte das [Kontaktformular](/kontakt) für Rückmeldung nutzen.</p> </blockquote></blockquote></blockquote><br/> <?php } } break; } echo $nomatch; } if (isset($_SESSION["benutzername"])) { ?> <form method="post"> <legend>Neues Passwort für</legend> <div> <label>E-Mail-Adresse (keine Änderung möglich!):</label/> <input type="text" name="xxx" readonly value="<?php echo $_SESSION["benutzername"] ?>"/> <label>ALTES Passwort:</label> <input type="password" name="palt" required="required"> <label>NEUES Passwort:</label><input type="password" name="pneu1" required="required"> <label>NEUES Passwort wiederholen:</label><input type="password" name="pneu2" required="required"> </div> <div> <input type="submit" name="reset" value="Passwort ändern"> </div> </form> <?php } if (!isset($_SESSION["benutzername"])) { ?> <form method="post"> <legend>Ich habe mein Passwort vergessen:</legend> <div> <label>E-Mail-Adresse:</label> <input type="text" name="name" required="required" autocomplete="username" autofocus="autofocus"> </div> <div> <input type="submit" name="new" value="Neues Passwort anfordern"> </div> </form> <?php } ?>