Zugang E: Passwort

Erstellt: 08.03.2022 Lesedauer ≤ 1 Min.

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(":"$zeile2);    
      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,$zeilenLOCK_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(":"$zeile2);    
      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
}
?>