Ich habe viele, viele, viele Beiträge darüber gelesen, wie "Sie wahrscheinlich Passwörter falsch speichern". Sie beziehen sich immer auf das Speichern von Kennwörtern auf einem Server, auf dem sich ein Benutzer anmeldet. Grundsätzlich werden allgegenwärtige Ratschläge wiederholt (Wortspiel beabsichtigt), wie z. B. Sicherstellen, dass die Kennwörter gesalzen werden usw. usw. Ich habe jedoch noch nie einen Artikel über bewährte Methoden zum Speichern von Kennwörtern auf einem Client gesehen, damit sich der Client nicht anmelden muss manuell jedes Mal, wenn sie sich anmelden möchten; die Funktion "Erinnere dich an mich".
Viele Softwareteile verfügen über diese Funktion, von Browsern bis zu Programmen wie Dropbox.
Ich habe kürzlich einen alten Artikel darüber gelesen, wie Dropbox eine ID auf Ihrem Computer speichert, die Sie einfach kopieren / auf einen anderen Computer einfügen und Dropbox starten und als das Gerät angemeldet sein können, von dem Sie die ID erhalten haben. Kein Login, kein Nichts und voller Zugriff auf das Dropbox-Konto. Dies scheint ein wirklich dummer Entwurf zu sein, aber ich kann mir keinen besseren Weg vorstellen, dies zu tun.
Ich bin mir nicht mal sicher, wie ich vermeiden soll, dass so etwas wie ein Cookie im Klartext gespeichert wird. Wenn Sie es verschlüsseln, wo speichern Sie den Schlüssel, um es zu entschlüsseln?
Die einzige Möglichkeit, Sicherheitslücken zu vermeiden, besteht darin, die Autologin-Funktion zu entfernen und den Benutzer jedes Mal zur Eingabe seines Kennworts zu bewegen, wenn er einen Dienst nutzen möchte.
Was kann ich über das sichere lokale Speichern von Anmeldeinformationen lesen, um die automatische Anmeldefunktion zu implementieren? Wenn die Prinzipien für einen ganzen Artikel zu einfach sind, welche? Die betreffende Software sollte nicht von Funktionen abhängen, die nicht auf allen Plattformen verfügbar sind (wie der "Schlüsselbund", den einige Linux-Distributionen haben).
Antworten:
Ein Weg ist:
Je nachdem, in welchem Framework Sie Ihre Site entwickeln, ist dieses Verhalten möglicherweise als integrierte Funktion verfügbar.
Da das HTTP-Protokoll ohnehin zustandslos ist, gibt es keinen funktionalen Unterschied zwischen der Beibehaltung der Anmeldung einer Person während einer einzelnen Sitzung zur Nutzung der Website und der automatischen Anmeldung bei der nächsten Nutzung der Website. Es ist nur eine Frage der Zeit, die Sie vor Ablauf der Sitzung einplanen.
Update: Verwenden Sie auch HTTPS, um die Sicherheit zu erhöhen.
Update 2: Beachten Sie, dass dieser Ansatz Einschränkungen aufweist, da er nicht für Benutzer geeignet ist, die ihre IP-Adresse häufig ändern. Es bietet jedoch ein erhöhtes Maß an Sicherheit und kann in bestimmten Situationen hilfreich sein.
quelle
Amazon (und viele andere) verwenden einen hybriden Ansatz. Sie bieten eine automatische Anmeldung zum Durchsuchen, Hinzufügen von Artikeln zum Warenkorb und zum Aufgeben von Bestellungen unter Verwendung der zuvor verwendeten Kombinationen aus Gutschrift und Versandadresse. Sie müssen jedoch für viele Aktionen Ihr Kennwort eingeben, z. B. zum Hinzufügen von Kreditkarten, zum Hinzufügen / Ändern von Lieferadressen, zum Aktualisieren von Kennwörtern, zum Anzeigen früherer Bestellungen (optional für den Benutzer) und für viele andere Kontoeinstellungen.
Also ja, Leute, die Zugang zu Ihrem Computer haben, könnten Ihre Sitzung übernehmen, aber Sie bekommen immer noch, was sie bestellen! (Noch wichtiger ist, dass der Anreiz, eine Sitzung zu hijacken, so gut wie zunichte gemacht wird.) Wenn jedoch jemand Zugang zu meinem Computer hat, habe ich größere Probleme als die Leute, die die durchschnittlichen Site-Sitzungen stehlen.
Wenn Teile Ihrer Anwendung nicht so sicher sind, können Sie ein Hybridmodell auswählen, in dem Sie eine Sitzungs-ID (Hash oder was auch immer) speichern, um Benutzer automatisch bei Teilen der Site mit niedriger Sicherheit anzumelden Sie müssen jedoch das Kennwort eingeben, wenn Sie höhere Sicherheitsbereiche betreten, und das Hochsicherheitstoken löschen, wenn die Sitzung endet.
Wenn dies eine Website auf Bankebene ist, ist die automatische Anmeldung natürlich keine Option. Wiederum setzen Sites, die diese Art von Sicherheit verwenden, den Wert der zu schützenden Daten und den zusätzlichen Komfort für den Benutzer voraus, um das potenzielle Risiko einer entführten Sitzung abzuwägen. Wenn Sie der Meinung sind, dass dies für Ihre Anwendung nicht der Fall ist, implementieren Sie keine automatischen Anmeldungen. Sie müssen darauf zugreifen können, welche Sicherheits- / Benutzerfreundlichkeits-Kompromisse für Ihren Anwendungsfall angemessen sind.
quelle
Es ist eigentlich nicht so schwer. Speichern Sie zuerst ein Cookie mit diesem Format:
Sie können einen sha1-Hash für das Token verwenden. Dann wird in der Benutzer-ID Ihres Datenbanktabellenspeichers "remember_me_tokens" ein bcrypt-Hash des Tokens und die Zeit, zu der das Token generiert wurde, angegeben.
Wenn jemand Ihre Website besucht, überprüfen Sie, ob das Cookie gesetzt ist. Wenn das Cookie gesetzt ist, prüfen Sie, ob innerhalb der letzten 7 Tage eine gültige Zeile in der Datenbank vorhanden ist. Wenn die Datenbank eine gültige Zeile für das Cookie enthält, legen Sie die Sitzung so fest, dass angezeigt wird, dass der Benutzer angemeldet ist. Löschen Sie außerdem die übereinstimmende Cookie- / Datenbankzeile und generieren Sie eine neue Cookie- / Token- / Datenbankzeile.
Wenn sie sich abmelden, löschen Sie den Cookie.
Führen Sie einen Cron-Job aus, um remember_me_tokens zu löschen, die älter als etwa 7 Tage sind.
quelle
Dies ist nur möglich, wenn Sie dem Gerät vertrauen, auf dem Sie es aufbewahren. Es liegt am Benutzer (wenn Sie das Gerät nicht beeinflussen können), wie sicher es ist. Es liegt einfach nicht in Ihrer Hand.
Wie in den Kommentaren angegeben:
quelle