2012-03-29 19 views
1

Ich versuche, Sicherheit zu verstehen, wenn es Session-Cookies in PHP kommt. Ich habe viel darüber gelesen, aber mir fehlen noch die Einzelheiten. Ich brauche die Grundlagen, jemanden, der Beispiele zeigt.Sicherheit in PHP-Session-Cookies

Zum Beispiel: Platziere ich session_regenerate_id() vor jedem Sitzungscookie? Woran sollte ich noch denken? Ich frage nach Einzelheiten in Code - Beispielen, wenn möglich.

Vielen Dank.

Ich bin mit 4 Sitzungs-Cookies nach der Anmeldung.

SESSION "site_logged_in" = true 
SESSION "site_user_nr" = the number of the user to access user_table_nr 
SESSION "site_user_id" = the user's id to use when changing data in tables 
SESSION "site_user_name" = the name of the user to display on page 

Wenn ich überprüfen, ob der Benutzer Zugriff hat, überprüfe ich, ob alle 4 Cookies gesetzt werden, und wenn site_logged_in auf true gesetzt.

Gibt es bessere Möglichkeiten? Habe ich die völlig falsche Vorstellung davon? Können Benutzer leicht gehackt werden?

+2

Sie verwenden tatsächlich ** ein ** Cookie, egal wie viele * Session * Variablen Sie verwenden möchten. Ich schlage vor, ein wenig über [PHP Session Handling] (http://www.php.net/manual/en/session.examples.basic.php) und möglicherweise auch über HTTP-Cookies zu lesen. – Jon

+0

Für einen Anfang, kombinieren Sie alle Variablen in 1 und trennen Sie mit einem Doppelpunkt. so wahr: 1: 1: thomas. Dann benutze 'list ($ site_logged_in, $ site_user_nr ...) = explode (SESSION_COOKIE_HERE);'. –

+0

Ben Carey: Möchten Sie den ganzen Code für das, was Sie gerade gesagt haben, schreiben? – Thomas

Antwort

1

In der Tat müssen Sie nur eine Sitzung auf Ihrer Website haben. Wenn Sie die Sitzung session_start() aufrufen, wird die Sitzung auf dem Server erstellt und der Benutzer erhält automatisch den Sitzungscookie. Denken Sie wie Sitzung ist eine Art von Container, die auf dem Server platziert, können Sie, was Sie wollen, in diesem Container. Sitzungscookies sind jedoch nur ein Schlüssel zum Zugriff auf diesen Container auf dem Server.

Es bedeutet, dass Sie einige Daten sicher in die $ _SESSION legen können und nur der Benutzer, der einen Cookie mit passender Sitzungs-ID hat, kann es lesen.

Informationen zu Benutzern, die gehackt werden. Ja, sie können gehackt werden, solange Sie keine HTTPS-Verbindung verwenden, da Cookies und alle anderen Daten im Klartext übertragen werden. Wenn also Benutzer Cookies abfangen, kann er auf die in der Sitzung gespeicherten Daten zugreifen.

0

Verwenden Sie immer ein Sicherheitstoken zum Protokollieren von Benutzern. Dieses Sicherheitstoken könnte mithilfe von crypt() generiert werden. Ändern Sie nach dem Anmelden von Benutzern das Sicherheitstoken regelmäßig, bis sie sich abmelden. Halten Sie außerdem die Serversicherung aller Sitzungsvariablen einschließlich des Sicherheitstokens (in einer Datenbank). Dies würde Ihnen auch helfen, den Benutzeranmeldeverlauf zu verfolgen.

Noch ein persönlicher Vorschlag: Verwenden Sie niemals Daten aus der Datenbank als Sitzungsvariablen, ohne sie mit einer der Hashfunktionen oder Funktionen wie crypt() zu verschlüsseln.

+0

Danke! Aber das würde mehr Datenverkehr zur Datenbank erfordern? Wie jedes Mal, wenn der Benutzer etwas tut, ändere ich das Sicherheitstoken. Vielleicht ist das aber kein Problem? – Thomas

+0

Ja, das würde Verkehr erzeugen. Aber Sie müssen das Sicherheitstoken für kleine Aktionen wie Navigation usw. nicht ändern. Sie können es nur vor wichtigen Aktionen wie Passwortaktualisierung usw. ändern. –

0

Die Sitzungsinformationen werden serverseitig gespeichert. Was Sie überprüfen sollten, ist, dass sie eingeloggt sind und dass sie sich anmelden können (im Falle von Löschungen/Verboten).

Während Sie überprüfen, ob sie vorhanden sind/sich anmelden können, können Sie die anderen Informationen aus der Datenbank abrufen, z. B. name, nr und so weiter. Alles, was Sie wirklich brauchen, ist ein Schlüssel namens "logged_in_user" oder etwas, das die ID des angemeldeten Benutzers speichert. Wie Alex Amiryan sagte, kann der Cookie kopiert werden. Sie sollten also auch die IP-Adresse der letzten zugreifenden Ansicht in der Sitzung speichern, damit Sie die Sicherheit gewährleisten können.

+0

Aber niemand kann den Namen des Cookies herausfinden, oder? Dass es "geloggt" heißt? – Thomas

+0

Und ich würde ständig die Daten des Benutzers aus der Datenbank abrufen müssen, anstatt sie im Sitzungscookie zu haben. Aber vielleicht ist das der Weg, es zu tun? – Thomas

+0

Die Sitzungsschlüssel (zB $ _SEESION ['site_logged_in']) sind außerhalb des Servers nicht sichtbar. Der Cookie enthält einen eindeutigen Schlüssel, der auf die Sitzungsdaten verweist. Sitzungsdaten verlassen den Server nicht, wenn Sie es nicht veranlassen. Ja, Sie müssten den Benutzer weiterhin aus den Daten holen, aber das ist der Weg, es zu tun, es sei denn, Sie finden eine andere Methode, um nach der Existenz des Benutzers zu suchen. – Gleeb