steckl: vergessenes passwort zusenden

hallo,

ich bin gerade dabei, eine Funktion fuer eine Seite zu programmieren, die einem User der sein Login-Passwort vergessen hat ein neues generiert und zusendet.

Zuerst hab ich mir mal angeschaut, wie das verschiedene andere Seiten machen.

Etwas erstaunt war ich bei einer Seite, die mir mein altes Passwort im Klartext zugesendet hat. Ich dachte immer, dass es aus Sicherheitsgruenden ueblich ist, Passwoerter nur in verschluesselter Form abzuspeichern. Irre ich mich da?

Weiterhin wuerden mich eure Tipps interessieren, was die beste Methode fuer eine Passwortzusendefunktion (keine ahnung wie man sowas nennt) ist.
Ich habe in der Datenbank u.a. die Felder Login, Email, Vorname, Zuname, Passwort (verschluesselt).
Ich hab mir gedacht,es reicht, wenn der User der das Passwort vergessen hat einfach seine Email-Adresse angibt (die sollte er ja kennen) und bekommt dann ein neu generiertes Passwort (und nochmal seinen Login) an diese Adresse zugesendet (falls die Adresse in der Datenbank vorhanden ist). Gibts hier ein Sicherheitsrisiko?

mfG,
steckl

  1. n'abend,

    Etwas erstaunt war ich bei einer Seite, die mir mein altes Passwort im Klartext zugesendet hat. Ich dachte immer, dass es aus Sicherheitsgruenden ueblich ist, Passwoerter nur in verschluesselter Form abzuspeichern. Irre ich mich da?

    es ist üblich, aber keine Pflicht. Es wird jedoch dazu geraten nur verschlüsselte Passwörter, oder deren Hashes (siehe MD5) zu speichern.

    Weiterhin wuerden mich eure Tipps interessieren, was die beste Methode fuer eine Passwortzusendefunktion (keine ahnung wie man sowas nennt) ist.

    Wenn du deine Passwörter verschlüsselt speicherst, hast du keine Möglichkeit einem deiner Benutzer sein verlorenes Passwort zuzusenden. Du kannst ihm ein neu generiertes Passwort zusenden, aber nicht sein ursprüngliches (ausser du speicherst das plaintext).

    Hierbei willst du beachten, dass es möglich ist, dass [irgendeinelustigeperson] den Benutzernamen / E-Mail-Adresse eines Benutzers kennt und ein neues Passwort für den Benutzer anfordert. Das ist zwar zuerst kein Problem, da du das neue Passwort (hoffentlich) sowieso an die im System registrierte E-Mail-Adresse schickst, kann aber zu nervigen Situationen führen, wenn du einfach das alte Passwort, durch das neue überschreibst. Es kann ja durchaus sein, dass der eigentliche Benutzer sein Passwort gar nicht vergessen hat und eigentlich auch kein neu generiertes gesetzt bekommen haben möchte.

    Sinnvoll ist also das neue Passwort in einem weiteren Feld zu speichern und bei Bedarf beim Login auf den Inhalt dieses zweiten Passwortfeldes zu prüfen.

    Ich habe in der Datenbank u.a. die Felder Login, Email, Vorname, Zuname, Passwort (verschluesselt).

    diese Struktur willst du also um das Feld neuesPasswort erweitern.
    Beim Login würdest du dann zunächst die normale Login-Prozedur ausführen (gibt es Benutzername und Passwort), schlägt das fehl, schaust du ob ein neues Passwort gesetzt wurde (gibt es Benutzername und neuesPasswort). Natürlich kann das auch in einer Abfrage kombiniert werden (gibt es Benutzer und [Passwort oder neuesPasswort]). Das neue Paswort solltest du nach erfolgreichem Login natürlich löschen.

    Ich hab mir gedacht,es reicht, wenn der User der das Passwort vergessen hat einfach seine Email-Adresse angibt (die sollte er ja kennen) und bekommt dann ein neu generiertes Passwort (und nochmal seinen Login) an diese Adresse zugesendet (falls die Adresse in der Datenbank vorhanden ist). Gibts hier ein Sicherheitsrisiko?

    Irgendwie musst du dem Benutzer die Login Informationen ja zukommen lassen.

    Sollte [irgendeinelustigeperson] den Zugang zum E-Mail Account eines Benutzers kennen, so kann er sich dadurch natürlich Zugang zu deinem System verschaffen. Das liegt aber kaum in deiner Verantwortung, oder deinem Einflussbereich.

    weiterhin schönen abend...

    --
    Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
    1. Hierbei willst du beachten, dass es möglich ist, dass [irgendeinelustigeperson] den Benutzernamen / E-Mail-Adresse eines Benutzers kennt und ein neues Passwort für den Benutzer anfordert. Das ist zwar zuerst kein Problem, da du das neue Passwort (hoffentlich) sowieso an die im System registrierte E-Mail-Adresse schickst, kann aber zu nervigen Situationen führen, wenn du einfach das alte Passwort, durch das neue überschreibst. Es kann ja durchaus sein, dass der eigentliche Benutzer sein Passwort gar nicht vergessen hat und eigentlich auch kein neu generiertes gesetzt bekommen haben möchte.

      der Sicherheitswahn ist unbegründet - sollte es sich bei der Seite um relevante Information handeln (zB Banking etc.) so wäre eine e-mail nicht sicher genüg, ist es nciht SOO wihtig - kann man den PW auch plaintext speichern. Die störung wenn einer die Mail kennt - wer macht das schon? und selbst wenn - DER eine von 2 millionen wird damit schon klar kommen. WOgegen soll den verschöüsselte PWspeciherung schützen? sollte es einer Schaffen die DB zu hacken, scahfft der es auch den geschützten Bereich zu knacken.
      Grundsätzlich - übertrieben Schutzmasnahmen würden die Interesse der Hacker eher erwecken, wie es mit Schlössern der fall ist ;)
      Foolproof muss die Seite sein mehr nicht.
      MFG
      bleicher

      --
      __________________________-
      Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
      1. Hi,

        der Sicherheitswahn ist unbegründet

        das hat Wahn nun mal so an sich. Dummerweise liegt hier kein Wahn vor, sondern lediglich die Erkenntnis, dass Sicherheit kein Ziel ist, sondern ein Weg - er muss _gegangen_ werden, und zwar permanent. Die Sicherheit eines Systems definiert sich immer durch das _Minimum_ aller Faktoren.

        • sollte es sich bei der Seite um relevante Information handeln (zB Banking etc.) so wäre eine e-mail nicht sicher genüg, ist es nciht SOO wihtig

        Ein "nicht so wichtig" existiert bei Sicherheit nicht. Nein, das ist kein Wahn. In dem Moment, wo Du im Zusammenhang mit Sicherheit "nicht so wichtig" propagierst, hast Du Dich schlicht und ergreifend für das komplette Fehlen _jeder_ Sicherheit entschieden.

        • kann man den PW auch plaintext speichern. Die störung wenn einer die Mail kennt - wer macht das schon? und selbst wenn - DER eine von 2 millionen wird damit schon klar kommen. WOgegen soll den verschöüsselte PWspeciherung schützen? sollte es einer Schaffen die DB zu hacken, scahfft der es auch den geschützten Bereich zu knacken.

        Bitte versprich mir, dass Du niemals in Deinem Leben die Verantwortung über irgend ein System übernimmst.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. ich  bin lediglich der Meinung, dass man Ostereier nicht in Fort-Nox Manier verstecken sollte. Sicherheitsaufwand/Relevanz der geschützten Elmente ist ein wichtiges Verhältniss.
          Ist mal Finanzelemnt im SPiel - hat man ein gewisses Budget dass man nicht überschreiten kann. Natürlich wäre es noch sicherer wenn man da zwei Dutzend Profis rund um die Uhr hat, die das ganze Überwachen. Aber das kann sich nun mal nicht jeder Listen.
          Es würde aber die Interesse der mutmaslichen Täter erwecken - denn "Verschlossene Türen"(c) sollten normaleweise etwas Wertvolles beschützen.
          Und wenn man bedenkt, dass großteil der Hackangriffe aus nichtkommerziellen Gründen begangen wird...
          aber - es ist IMHO, und sollte nur als eine der vielen Meinungen betrachtet werden, wenn überhaupt ;D
          MFG
          bleicher

          --
          __________________________-
          Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
      2. n'abend,

        der Sicherheitswahn ist unbegründet - sollte es sich bei der Seite um relevante Information handeln (zB Banking etc.) so wäre eine e-mail nicht sicher genüg, ist es nciht SOO wihtig - kann man den PW auch plaintext speichern.

        ich würde behaupten, dass die "Relevanz einer Information" (eher: "Schutzbedürfnis der Information") sich an subjektiveren Dingen misst. Für mich sind beispielsweise die Nutzerdaten meines Systems wichtig genug geschützt zu werden, auch wenn diese keine Bankdaten enthalten.

        Die störung wenn einer die Mail kennt - wer macht das schon?

        Wenn du solch eine Frage stellst, scheinst du offenbar nicht viel Erfahrung mit größeren Systemen und den Besuch 14jähriger Script-Kiddies zu haben.

        und selbst wenn - DER eine von 2 millionen wird damit schon klar kommen.

        Nur weil _dir_ das evtl. egal ist, machen sich unbedarftere Personen da durchaus mehr Gedanken. Ich bekomme (leider) sämtliche Supportanfragen meines Systems. Es würde dich erstaunen, wie viele Personen von null auf Hundert von "Einbruchsversuch", "Datendiebstahl" und "Hack-Angriff" sprechen, weil sie einfach _keine_ Ahnung haben.

        WOgegen soll den verschöüsselte PWspeciherung schützen?

        unter anderem naive User, die in allen möglichen Systemen das selbe Passwort verwenden. Aber über sowas muss man sich schon 5 Minuten Gedanken machen, sonst wird das nix mit der Erkenntnis.

        Grundsätzlich - übertrieben Schutzmasnahmen würden die Interesse der Hacker eher erwecken, wie es mit Schlössern der fall ist ;)
        Foolproof muss die Seite sein mehr nicht.

        Ich schliesse mich Cheatah an und hoffe, dass du mit dieser naiven und unverantwortungsvollen Einstellung keine Systeme für andere Benutzer betreibst.

        weiterhin schönen abend...

        --
        Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
        sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
    2. Hello,

      Wenn du deine Passwörter verschlüsselt speicherst, hast du keine Möglichkeit einem deiner Benutzer sein verlorenes Passwort zuzusenden. Du kannst ihm ein neu generiertes Passwort zusenden, aber nicht sein ursprüngliches (ausser du speicherst das plaintext).

      na ja, das ist so ja nun nicht ganz richtig. Natürlich kann man etwas verschlüsseltes wieder entschlüsseln, das ist ja der Sinn von Verschlüsselung, dass nur derjenige es entschlüsseln kann, der weiß wie. Das Problem ist, dass häufig zur Verschlüsselungen NICHT eine Verschlüsselung eingesetzt wird, weil man z.B. mit dem Wissen über den Algorithmus (und ggf. seine Parameter) sämtliche Passwörter im System entschlüsseln könnte. Man greift daher auf die vermeintlich "sichereren" Hash-Algorithmen wie MD5 oder SHA zurück, die eigentlich für einen anderen Zweck gemacht wurden, nämlich nicht Verschlüsselung sondern schnelle und eindeutige Erkennung, ob sich zwei Nachrichten gleichen. Im Sinne der Fälschungssicherheit sind diese genau so konzipiert, dass man keine eindeutige Umkehrung mehr hat, und genau in diesem Fall hast du Recht, man kann dem Benutzer in der Tat kein Passwort zuschicken.

      MfG
      Rouven

      --
      -------------------
      Unser Problem ist, dass wir eine Demokratie entwickelt haben, was nicht immer der richtige Weg ist  --  Bernie Ecclestone zu den lästigen Diskussionen um Regeländerungen in der Formel 1
      1. Hi,

        Man greift daher auf die vermeintlich "sichereren" Hash-Algorithmen wie MD5 oder SHA zurück, die eigentlich für einen anderen Zweck gemacht wurden, nämlich nicht Verschlüsselung sondern schnelle und eindeutige Erkennung, ob sich zwei Nachrichten gleichen.

        Nein, Hashes sind nicht für eine eindeutige Erkennung der Gleichheit geeignet.

        Unterschiedliche Hash-Werte sagen zwar aus, daß die Originalwerte unterschiedlich sein müssen, gleiche Hashwerte sagen aber nicht aus, daß die Originalwerte identisch sind.

        Hashes reduzieren sehr große bis unendliche Definitionsmengen (Bsp. MD5: unendlich viele Strings) auf (relativ) kleine, endliche Wertemengen (Bsp. MD5: 2^128 Werte). Da die Wertemenge kleiner als die Definitionsmenge ist, ist ein Hash nicht eindeutig, da zu mehreren Elementen der Definitionsmenge jeweils dasselbe Element der Wertemenge gehört.

        Wären Hashes eindeutig, könnte man zu jedem Hash den (eindeutigen) Originalwert wieder berechnen, womit es sich um eine Verschlüsselung handeln würde ...

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        O o ostern ...
        Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    3. Hi,

      erstmal danke für die vielen Antworten an alle

      Sinnvoll ist also das neue Passwort in einem weiteren Feld zu speichern und bei Bedarf beim Login auf den Inhalt dieses zweiten Passwortfeldes zu prüfen.

      das hört sich sinnvoll an.

      Ansonsten werd ich mir mal alle eure Beiträge durchgehen und die Hinweise die ich gut finde noch mit einbauen.

      weiterhin schönen abend...

      gute nacht ;)

  2. Hallo,

    Weiterhin wuerden mich eure Tipps interessieren, was die beste Methode fuer eine Passwortzusendefunktion (keine ahnung wie man sowas nennt) ist.

    Ob es die beste Methode ist weiß ich nicht, aber ich kann dir mal erklären wie ich das gelöst habe.

    1. Passwörter habe ich nicht im Klartext, sondern über md5 gespeichert
    2. Wenn ein Benutzer sein Passwort vergessen hat, kommt er auf eine Seite, wo er Benutzername und E-Mail-Adresse eingeben muss
    3. Wenn der Benutzername zu der bei der Registrierung angegebenen E-Mail-Adresse passt, schicke ich dem Benutzer einen Link
    4. Der Link lautet: domain/changepasswd.php?name=$Benutzername&code=$VerschluesseltesPasswortAusDerDatenbank
    5. Ruft der Benutter dann diesen Link auf, können zwei Fälle eintreten
      5a) name und code passen nicht zusammen => Benutzer bekommt eine Fehlermeldung, dass der Link nicht korrekt ist
      5b) name und code passen zusammen => der Benutzer bekommt ein Formular angezeigt, über das er sein Passwort neu vergeben kann

    Viele Grüße,
    Thomas

  3. Hallo,

    Ich hab mir gedacht,es reicht, wenn der User der das Passwort vergessen hat einfach seine Email-Adresse angibt (die sollte er ja kennen) und bekommt dann ein neu generiertes Passwort (und nochmal seinen Login) an diese Adresse zugesendet (falls die Adresse in der Datenbank vorhanden ist). Gibts hier ein Sicherheitsrisiko?

    Die Variante mit dem Passwort zusenden nach Kombinationseingabe User/ Email gefäält mir nicht.
    Um Spam aus dem Weg zu gehen benutze ich einem/ mehrere Spam-Accounts.
    Ich stehe jedesmal, wenn ich für einen Account meine Email-Addresse eingeben soll vor dem Dilemma, ob der angebene Account möglicherweise mal abgeschaltet sein könnte.
    Die Version mit der persönlichen Frage finde ich in deisem Zusammenhang als angenehmer. Wenn auch vermutlich unsicherer.

    bydey

    --
    -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
    -- Navigate all your PHP web projects with  PHP Project Browser--
  4. Hi!

    Passwörter gehören imho grundsätzlich verschlüsselt. Falls ein Benutzer sein Passwort vergessen hat, gehe ich folgendermaßen vor:

    1. Über einem Formular kann ein Benutzer ein neues Passwort anfordern. Dazu muss erlediglich seine Email Adresse in ein Formularfeld eintragen.
    2. Der Benutzer bekommt dann auf diese Email (falls im System registriert) eine Antwort mit dem Hinweis das jemand ein neues angefordert hat.
    -Hat er kein Passwort angefordert, soll er die Email einfach ignorieren und die Anfrage verfällt nach X-Stunden oder X-Tagen (whatever you want). Wärend dieser Zeit kann keine neues Passwort angefordert werden.
    -Hat er tatsächlich ein neues Passwort angefordert, benutzt er eine in der EMail enthaltete URL um die Passwortanforderung zu bestätigen. Diese URL enthält dann einen einfachen Nummerncode und die Email-Adresse von der die Anforderung stattgefunden hat. Der Nummerncode wurde dem diesem Benutzer zugeteilt und wird, in meinem Fall, in einer Datenbank gespeichert.
    3. Stimmen Code und Adresse zusammen, bekommt der Benutzer ein neues Passwort per Mail zugeschickt mit dem Hinweis doch sofort nach einem Login wieder ein eigenes Passwort anzulegen.

    Gruß
    Olli

  5. Hallo steckl,

    Weiterhin wuerden mich eure Tipps interessieren, was die beste Methode fuer eine Passwortzusendefunktion (keine ahnung wie man sowas nennt) ist.

    Da muss ich natuerlich auch meinen Senf^WVorschlag zu abgeben:
    * E-Mail + Benutzername eingeben
    * E-Mail schicken mit Passwort, das zusaetzlich zum Alten gilt
    * Auf beide Passwoerter ueberpruefen (Nach einer gewissen Zeit wird das zugeschickte natuerlich wieder geloescht)
    * Aenderung des Passworts verlangen

    Ich habe in der Datenbank u.a. die Felder Login, Email, Vorname, Zuname, Passwort (verschluesselt).
    Ich hab mir gedacht,es reicht, wenn der User der das Passwort vergessen hat einfach seine Email-Adresse angibt (die sollte er ja kennen) und bekommt dann ein neu generiertes Passwort (und nochmal seinen Login) an diese Adresse zugesendet (falls die Adresse in der Datenbank vorhanden ist). Gibts hier ein Sicherheitsrisiko?

    Ich wuerde Benutzername und Passwort nicht zusammen verschicken - wenn irgendjemand die Mail abfaengt, hat er beides (Ich warte schon sehnsuechtig auf die Zeit wo jeder PGP hat). Der Benutzer selber sollte den Benutzernamen ja wissen. Das setzt natuerlich voraus, dass man sich nicht mit seiner E-Mail-Adresse einloggen kann.

    Viele Grüße aus Freiburg,
    Marian

    --
    Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
    <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->
    1. hi,

      Da muss ich natuerlich auch meinen Senf^WVorschlag zu abgeben:

      über Senf freu ich mich immer :-)

      * E-Mail + Benutzername eingeben

      Ist es denn wirklich nötig, beides abzufragen, weil es kann auch sein, dass der User seinen Login nicht kennt, weil er sich nicht über das Tool registrieren kann, sondern der Account wird von einem Admin auf Anfrage erstellt.

      * E-Mail schicken mit Passwort, das zusaetzlich zum Alten gilt
      * Auf beide Passwoerter ueberpruefen (Nach einer gewissen Zeit wird das zugeschickte natuerlich wieder geloescht)

      den tipp hab ich ja schonmal bekommen und finde ihn recht gut.

      * Aenderung des Passworts verlangen

      Ich wuerde Benutzername und Passwort nicht zusammen verschicken - wenn irgendjemand die Mail abfaengt, hat er beides (Ich warte schon sehnsuechtig auf die Zeit wo jeder PGP hat). Der Benutzer selber sollte den Benutzernamen ja wissen. Das setzt natuerlich voraus, dass man sich nicht mit seiner E-Mail-Adresse einloggen kann.

      ist es denn leicht, emails abzufangen?

      mfG,
      steckl