Frage

Ich entwickle ein PHP-basierte Login-System. Jeder Benutzer hat eine ID (eine Zahl) und ein Passwort, das als gesalzenes Hash gespeichert wird.

Ich bin in der Lage, herauszufinden, ob ein Login sucessful ist oder nicht, aber jetzt brauche ich diese Informationen irgendwo zu speichern (so dass der Benutzer nicht dauerhaft abgemeldet).

In der Vergangenheit habe ich mit $ _SESSION Variablen gespielt. Allerdings scheinen diese gelöscht werden, wenn der Benutzer den Browser verlässt, was unerwünscht ist. Auch ich kann nicht „davon ausgehen“, dass der Benutzer nicht versuchen, das System zu betrügen, so hat es sicher sein.

So, hier sind meine Fragen:

  1. Sollte ich $_SESSION oder $_COOKIE? Was sind die wichtigsten Vorteile von jedem dieser Ansätze?
  2. Wie ein 'Remember me' Checkbox implementieren?
  3. Welche Informationen sollten in der Sitzung / Cookie-Variable gespeichert werden?

Beachten Sie, dass keine Datenbanksicherheitsfragen unter Berücksichtigung in dieser besonderen Frage getroffen werden.

Zu Nummer 3, was ich meine genau ist:

  • Sollte ich die ID und die Hash-Passwort des Benutzers in dem Cookie / session oder
  • Soll ich die ID und das Nicht-Hash-Passwort des Benutzers in der Cookie / session oder
  • Sollte ich eine „SessionID“ und das Passwort (gehasht oder nicht-gehasht?) Oder
  • Sollte ich eine "SessionID", die "ID" und das Passwort (erneut gehasht oder Nicht-Hash)?

Ich mag meine Website als sicher, aber effizient und benutzerfreundlich wie möglich zu halten. Wenn ein Sitzungs-basierter Ansatz genommen wird, würde ich auch eine Erklärung zu schätzen weiß darüber, wie es in der Datenbank zu speichern.

Vielen Dank im Voraus

EDIT: Eran ist und Brians Antworten kombiniert zu sein scheinen, was ich brauche. Leider kann ich markieren nur eine von ihnen als angenommen. Ich werde versuchen, vorwärts zu gehen und implementieren, um zu sehen, die man war nützlicher.

War es hilfreich?

Lösung

Ich will Eran des Punkt nie speichert das Benutzer-Passwort oder sogar einen Hash des Passworts in der Sitzung oder Cookie-Daten wiederholen.

In der Regel habe ich die Funktionalität, die Cookies in Web-Anwendungen erinnere mich implementiert. Ein guter Platz für Informationen starten auf den Aufbau einer „sicheren“ persistent Login-System ist das Blog Sie auf dem bowl . Eine eingehende Antwort ist bereits in einen anderen Stack-Überlauf Antwort .

Wenn Sie sicherstellen haben müssen, dass die Anmeldung ist sichern Sie https verwenden müssen. Dies liegt daran, Cookies oder Sitzungen gestohlen werden können, wenn sie nicht verschlüsselt sind.

Eine weitere gute Praxis zu folgen, ist das 2-Level Login-System. Sie können dies auf Seiten wie Amazon sehen, wo man Dinge in Ihren Warenkorb ohne Anmeldung hinzufügen können, aber wenn Sie Ihr Konto in irgendeiner Art und Weise Sie Ihr Passwort erneut eingeben müssen zur Kasse oder bearbeiten.

Andere Tipps

Für sensible Informationen (dh Authentifizierungsergebnisse) nur Sitzungen. Sessions sind Server-Seite gespeichert und sind viel weniger wahrscheinlich beeinträchtigt werden.

In Bezug auf Lebensdauer einer Sitzung ist der Standard die Lebensdauer der Browser-Session - aber Sie können das kontrollieren. Es gibt verschiedene Einstellungen, die beeinflussen, dass:

session.gc_maxlifetime -. Effektiv kontrolliert die Lebensdauer der Sitzung

session.gc_probability und session.gc_divisor zusammen bestimmen, wie oft Sitzung Garbage Collection stattfinden wird.

Und zuletzt - session.cookie_lifetime steuert die Lebensdauer des Session-Cookie (das Cookie, das die Session-ID hält, damit es nicht über die URL tranmistted werden muss). Es sollte den Wert des session.gc_maxlifetime entsprechen.

Auch nie speichern Passwörter in Sitzungen oder Cookies (auch nicht in verschlüsseltem Format). Nur die Ergebnisse der Authentifizierung.

Speichern Sie die ID in $ _SESSION aber nicht speichern die Hash-oder Nicht-Hash-Passwort. Sobald der Benutzer in und die ID angemeldet hat, wird in $ _SESSION gespeichert, müssen Sie das Passwort nicht brauchen mehr.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top