sicheres auto-login - welche Möglichkeiten?


  • Mod

    Hallo Leute.

    Durch den Session-Hijacking Thread inspiriert, stelle ich mal die Frage wie ihr eure auto-logins effektiv schützt? Damit meine ich: welche Techniken benützt ihr um dem User ein auto-login (login ohne manuelle Eingabe der Logindaten) zu ermöglichen und gleichzeitig den Account vor missbrauch zu schützen?

    Ich meine, es gibt einige interssante Techniken, aber die meisten scheinen mir irgendwie überproportioniert zu sein. Auch würde mich interessieren wie hoch ihr die Gefahr einschätzt, dass die Cookie Daten gesnifft werden.

    Ich habe einige Texte diesbezüglich gelesen, aber kam noch nicht dazu verschiedene Sachen real zu implementieren. Deshalb würden mich eure Erfahrungen besonders interessieren.

    danke schonmal 🙂



  • Hallo!

    Das ist ein Thema, mit dem ich mich noch nicht so eindringlich beschäftigt habe. Momentan zerbreche ich mir den Kopf über Templatesysteme und ein multilinguales UI (min. 3 Sprachen); vom UI unabhängig soll die Webseite außerdem so ähnlich wie Wikipedia den Inhalt (z.B. Artikel) auf mehreren Sprachen verfügbar machen.

    Die einfachste Technik für ein Autologin ist ein MD5-Hash und die User-ID in jeweils einem Cookie zu speichern. Den MD5-Hash erzeugt man aus der Konkatenation vom Benutzernamen, vom Benutzerpasswort und von einer geheimen Zeichenkette (der Secret Hashkey), die am besten in einer Datei steht, welche sich außerhalb des Webroot-Verzeichnisses befindet (im Falle, dass der PHP-Interpreter "versagt" od. kurz nicht vorhanden ist; Nebenfrage: wie wahrscheinlich ist sowas?).

    $hashKey = md5(SECRET_HASHKEY . $login_name . $password_hash);
    

    Wenn ein Benutzer nach langer Inaktivität z.B. sein beliebtes Forum wieder ansurft, wo er sich zuvor per Auto-Login angemeldet hatte, so wird er dank den Cookies wieder automatisch angemeldet. Das funktioniert, indem der Server über die User-ID im Cookie, sich den Benutzernamen und das Benutzerpasswort aus der DB holt, den Hash wie gewöhnlich generiert und diesen mit dem Hash aus dem Cookie vergleicht. Falls sie exakt übereinstimmen, so wird der Benutzer automatisch angemeldet.
    Etwas was mir erst jetzt durch diese Erklärung aufgefallen ist:
    Ich dachte bisher immer, dass der Secret Hashkey notwendig wäre um einen gewissen Grad an Sicherheit zu bieten, aber wenn ich so recht überlege, dann ist der nicht wirklich notwendig. Ein simpler Hash vom Benutzernamen und vom Passwort würde reichen, oder nicht?. Ein Angreifer macht sich ja schließlich nicht die Mühe herauszufinden, wie der Hash generiert wurde (denn wenn er das weiß, so fehlen ihm immer noch die Passwörter), sondern er versucht sich meistens Zugriff auf das Passwort eines Benutzers zu schaffen, oder sein Cookie mit dem gültigen Hash zu stehlen.

    Die Frage für mich lautet: Wie schützt man die Cookies am besten davor, von der Ferne aus entführt zu werden? Denn wenn man seinen Computer mit Verwandten/Bekannten teilt, so ist es meistens eine Leichtigkeit lokal an die Cookies von anderen ranzukommen. Und sollen wir überhaupt Cookies für das Auto-Login Feature verwenden? Ich denke, ja, denn es gibt keine Alternative, oder kann mich jemand eines Besseren belehren?



  • Wirklich sicher geht garnicht - wenn Du irgendwo Login-Daten speicherst (und ein Hash der Daten ist ja auch nichts anderes), wo Du keine komplette Kontrolle über Art der Speicherung und Verwendung der Daten hast, dann hast Du immer eine potentielle Sicherheitslücke.

    Das einzige was Du machen kannst, ist es dem Angreifer das Leben zu erschweren. Das kannst Du zum Beispiel machen, indem Du zusätzliche Informationen über den Benutzer zusätzlich zu den Daten aus dem Cookie verwendest (eg User-Agent, o.ä.).

    Mehr ist aber nicht drinn an zusätzlicher Sicherheit [EDIT]ohne zusätzliche Probleme zu schaffen[/EDIT].

    Gruß Jens



  • Auch würde mich interessieren wie hoch ihr die Gefahr einschätzt, dass die Cookie Daten gesnifft werden.

    Wenn ich eine solch hohe Sicherheit benötigte würde ich sowieso SecureHTTP und nicht HTTP benützen, damit sollte das eigentlich erledigt sein, oder?

    MfG SideWinder


Anmelden zum Antworten