2012-04-07 6 views
0

Ich habe eine Website, die OpenID verwendet, um Benutzer anzumelden. Die Bibliothek, die ich benutze, gibt ein Benutzerprofil zurück, wenn der Benutzer sich anmeldet. Dieses Profil enthält die E-Mail des Benutzers, Name, einen Link zum Avatar und eine ID, die der OpenID-Anbieter zurückgegeben hat.Sichere Strategie, um bei der Verwendung von OpenID eingeloggt zu bleiben

Meine Strategie protokolliert, um den Benutzer zu halten, dabei ist:

  • Wenn der Benutzer logges in zum ersten Mal, ich einen Hash-Code auf der Grundlage der
  • ID zurückgegeben OpenID erstellen
  • Ich speichere diese Hash-Code neben der ID des Benutzers in 2 Cookies.
  • Wenn der Benutzer auf meiner Website kommt, überprüfe ich für diese Cookies, und wenn sie verfügbar sind, versuchen Sie die ID und den Hash-Code übereinstimmen, wenn es richtig ist, melden Sie ich den Benutzer in.

Nun ist das Problem das: Wenn diese Cookie-Informationen irgendwie vom Benutzer gestohlen werden, kann sich der Hacker einfach anstelle des Benutzers selbst einloggen. Ich könnte einen neuen Hash-Code für jedes Mal erstellen, wenn sich der Benutzer anmeldet und die Cookins des Benutzers aktualisiert, aber die Informationen anderer Browser/Computer-Cookies ungültig machen.

Da die StackOverflow-Website nicht von einem solchen Problem betroffen ist, würde ich gerne wissen, was ich tun soll, um sowohl meine Anmeldestrategie zu sichern als auch die Funktionalität hinzuzufügen, um für die Benutzer angemeldet zu bleiben.

+0

Was meinen Sie mit "Hash-Code"? Wenn es sich lediglich um einen sicheren Hash der Openid-URL des Benutzers handelt, kann ein Angreifer das erraten - es besteht kein Grund, sich die Mühe zu machen, die ursprünglichen Cookies überhaupt zu erhalten. –

+0

Woher wissen Sie, dass die StackOverflow-Website nicht unter diesem Problem leidet? –

+0

@NickJohnson du hast recht, aber ich tue mein Bestes, um es ihnen schwer zu raten. Aber irgendwie halte ich eine zufällige Session-ID (wie du erwähnt hast) für eine bessere Lösung. –

Antwort

2

Der Standardweg, dies zu tun, ist, einen bedeutungslosen zuzuweisen Session ID und sende das als Cookie; In Ihrer Datenbank können Sie die Anmeldeinformationen des Benutzers neben dieser Sitzungs-ID speichern. Wenn sich ein Benutzer abmeldet, können Sie diese Sitzungs-ID ungültig machen.

+0

Vielen Dank. Dies ist die einfachere UND die bessere Lösung, denke ich. (Erstellen einer ** zufälligen ** Sitzungs-ID, anstatt sie basierend auf einem Hash-Algorithmus + Salz zu erstellen) –

1

Ist das nicht ein Problem mit ALLEN Mechanismen, damit der Client eingeloggt bleibt? Wenn Sie sich bei Ihrem, sagen wir, Gmail anmelden und ich Ihre Cookies stehlen und sie in meinem eigenen Browser ablegen, gibt es keine Möglichkeit, meinen Browser von Ihrem Browser zu unterscheiden und ich erhalte Zugriff auf Ihr Google Mail. Es gibt keine Möglichkeit, die Art von Angriffen, die Sie vorschlagen, zu stoppen (außer dem Benutzer, der seinen Computer frei von Viren usw. hält, die den Cookie stehlen könnten)

+0

Also schlagen Sie vor, dass diese Strategie (+ eine Möglichkeit, den Hash-Code für die Benutzer zu erneuern, wenn ihre Cookies gestohlen wurden) sicher genug ist? –

+0

Ja, ich denke schon. Es verhindert Cookie-Fälschung, was gut ist (ich habe etwas ähnliches für ein Projekt implementiert, an dem ich gerade arbeite). Nichts, was Sie tun können, wenn Clientbrowser ihre Anmeldeinformationen gestohlen bekommen, es sei denn, die automatische Anmeldung wird deaktiviert, wenn sie empfindlich genug ist. –

Verwandte Themen