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
Ladefehler: $$$ file a $$$
<?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
}
?>