1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Passwörter mit Sonderzeichen ausgeben

  • osiris
  • 20. März 2008 um 10:05
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • osiris
    Punkte
    695
    Beiträge
    109
    • 20. März 2008 um 10:05
    • #1

    Hallo,
    ich würde gerne in PHP zufällige Passworter mit einer Länge von 8 Zeichen generieren.
    Ich habe das momentan so gelöst:

    PHP
    $small = "abcdefghikmnopqrstuwxyz";
    $caps = "ABCDEFGHJKLMNPQRSTUVWXYZ";
    $num = "023456789";
    $spex = "-_@#$%&§/[]()\=+*<>?!";
    
    
    $charset = "$small$caps$num$spex";
    
    
    $pwd = NULL;
    
    
    while (strlen($pwd) < 8) {
    
    
    $char = $charset[rand(0, strlen($charset)-1)];
    
    
    $pwd = "$pwd$char";
    }
    
    
    echo $pwd;
    Alles anzeigen

    Dabei gibt es nun ein Problem:

    Ich bekomme teilweise Passwörter geliefert, die nur 2 Stellen haben oder ganz leer sind. Außerdem enthalten die ausgegebenen Zeichenketten oft ein Â.
    Das hängt damit zusammen, dass Zeichen wie "<", ">", und "&" in HTML spezielle Bedeutungen haben. Wenn dahinter dann kein sinnvoles HTML kommt wird das Passwort einfach abgeschnitten und wenn sinnvoller Code folgt, entstehen Zeichen, die in $charset nicht enthalten sind.

    Um das zu vermeiden, müsste ich die Zeichenfolge $pwd in PHP als für HTML unbedeutsam kennzeichnen, weil ich $spex der Übersicht wegen so lassen will wie es ist. Wie macht man sowas?

    Stellt sich dieses Problem eigentlich auch beim Versand der PWs per Mail und der Abfrage am Login?
    Wohl eher nicht oder?

    Danke im Voraus!

  • josef19
    Punkte
    749
    Beiträge
    135
    • 20. März 2008 um 10:48
    • #2

    http://at.php.net/manual/de/function.htmlspecialchars.php
    http://at.php.net/manual/de/function.urldecode.php
    http://de.wikipedia.org/wiki/Cross-Site_Scripting

    Die ganze Sache kann in Verbindung mit HTML, Datenbanken, Urls ... relativ kompliziert werden.

    Ich würde nur diese zulassen:
    $spex = "-_@#%§/[]()=+*?!";

  • osiris
    Punkte
    695
    Beiträge
    109
    • 20. März 2008 um 11:19
    • #3

    Danke für die Info!

    Ich werd einfach deinen Vorschlag annehmen und die problembehafteten Zeichen rauslassen. Das mindert die Passwortsicherheit ja nicht wesentlich.

  • hal
    Punkte
    11.122
    Beiträge
    2.208
    • 20. März 2008 um 12:17
    • #4

    Das da geht problemlos bei mir:

    PHP
    <?php
    $small = "abcdefghikmnopqrstuwxyz";
    $caps = "ABCDEFGHJKLMNPQRSTUVWXYZ";
    $num = "023456789";
    $spex = "-_@#$%&¤/[]()\=+*<>?!";
    
    
    $charset = "$small$caps$num$spex";
    
    
    $pwd = NULL;
    
    
    while (strlen($pwd) < 8) {
    
    
    $char = $charset[rand(0, strlen($charset)-1)];
    
    
    $pwd = "$pwd$char";
    }
    
    
    echo htmlspecialchars($pwd);
    ?>
    Alles anzeigen
  • osiris
    Punkte
    695
    Beiträge
    109
    • 25. März 2008 um 07:55
    • #5

    Nun ja, das Problem ist bloß, dass sich ja dadurch natürlich auch der Hashwert ändert, wenn das Passwort Sonderzeichen enthält, die umgewandelt werden.
    Wenn also der Nutzer das Passwort dann im normalen Klartext für einen Login eingibt, wird das nicht funktionieren, außer, wenn man das ganze mit

    htmlspecialchars($passwort) abgleicht.

    Außerdem löst dein Vorschlag nicht das Problem mit dem  (&Acirc; Â). Das wundert mich ein wenig, weil ja das "&" eigentlich umgewandelt werden sollte.

    Ich frage mich aber gerade, ob sich der Aufwand lohnt, um das ordentlich hinzubekommen. Schließlich gibt man das Passwort ja nicht auf dem Bildschirm aus.
    Und es handelt sich hier ja einzig und allein um ein Problem von HTML.
    Deshalb müsste das doch eigentlich auch so funktionieren, wenn ich den MD5-Hash des Passwortes speichere und dann mit dem der Formulareingabe des Nutzers abgleiche. Sicherheitshalber habe ich alle Sonderzeichen aus $spex entfernt, die auch eine spezielle HTML-Kodierung haben:

    $spex = "-@%/[]()+*?!$";

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum