Wie sicher sind PHP-Sitzungsvariablen?
Ich habe ein login-Skript, dass überprüft Benutzername/Passwort gegen die Daten in einer 'user' - Tabelle. Des weiteren habe ich eine "Rollen" - Tabelle, gibt die Zugriffsebene eines bestimmten Benutzers. Vorausgesetzt, ich bin mit sicheren login-Skripte, gibt es irgendwelche Sicherheitslücken in einfach durchführen eine zusätzliche Abfrage, nach erfolgreicher Anmeldung, gegen die 'Rollen' - Tabelle, um zu entdecken, die Berechtigung des Benutzers-level und speichern diese in einer session-variable? Die Idee wäre dann, dass auf jeder Seite mit gemischten Behörde, ich könnte einfach die Abfrage der session-variable zu entdecken, die der angemeldete Benutzer die Berechtigung.
Dank.
InformationsquelleAutor der Frage oym | 2009-07-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sitzungen sind deutlich sicherer als, sagen wir, cookies. Aber es ist immer noch möglich, zu stehlen, eine Sitzung und somit die hacker haben vollen Zugriff auf alles, was in dieser Sitzung. Einige Möglichkeiten, um dies zu vermeiden werden IP-Prüfung (was Recht gut funktioniert, aber ist sehr low-fi, und damit nicht zuverlässig auf seinen eigenen), und mit einem nonce. In der Regel mit einer nonce, haben Sie eine pro-Seite "token", so dass auf jeder Seite überprüft, dass die Letzte Seite nonce, dem entspricht, was Sie gespeichert hat.
Entweder Sicherheits-check, es ist ein Verlust an usability. Wenn Sie die IP-Prüfung und der Benutzer befindet sich hinter einer intranet-firewall (oder irgendeine andere situation, die Ursachen dieser), die nicht im Besitz einer festen IP für diesen Benutzer müssen Sie dann erneut authentifizieren jedes mal, wenn Sie verlieren Ihre IP. Mit einem nonce, bekommen Sie das immer Spaß "auf zurück Klicken, wird dazu führen, diese Seite zu brechen" situation.
Aber mit einem cookie, kann ein hacker stehlen die Sitzung einfach durch die Verwendung relativ einfachen XSS-Techniken. Wenn Sie das speichern der Benutzer-session-ID als cookie, Sie sind anfällig für diese als gut. Also, obwohl die Sitzung wird nur durchlässig, um jemanden, kann auch ein server-level-hack (das erfordert viel raffiniertere Methoden und in der Regel eine gewisse Menge von Berechtigungen, wenn Ihr server sicher ist), sind Sie immer noch gehen zu müssen, einige zusätzliche überprüfung bei jedem Skript-Anfrage. Sollten Sie keine cookies und AJAX zusammen, da dies macht es ein bisschen einfacher zu Total in die Stadt gehen, wenn das cookie gestohlen wird, wie Sie Ihre ajax-requests können nicht Holen Sie sich die Sicherheitskontrollen auf jede Anfrage. Zum Beispiel, wenn die Seite benutzt eine nonce, aber die Seite wird nie neu geladen, das script kann nur die Prüfung für das match. Und wenn der cookie hält die Authentifizierungsmethode kann ich nun in die Stadt gehen dabei meine Boshaftigkeit mit dem gestohlenen cookie und die AJAX-Loch.
InformationsquelleAutor der Antwort Anthony
Nur Skripte ausführen, die auf Ihrem server haben Zugriff auf das _SESSION-array. Wenn Sie den Bereich definieren, der die session-cookie, können Sie auch einschränken auf ein bestimmtes Verzeichnis. Die einzige Art, wie jemand neben Sie bekommen konnte, die session-Daten wird Spritzen einige PHP-code in eine Ihrer Seiten.
Als für das system Sie verwenden, ist das akzeptabel und ist eine gute Möglichkeit zum speichern von Datenbank-Aufrufe, aber im Hinterkopf behalten, dass es muss der Benutzer Abmelden und erneut anmelden und für jede Berechtigung änderungen zu übernehmen. Also, wenn Sie wollte, Schloss sich ein Konto und ein Benutzer ist bereits angemeldet sind, können Sie nicht.
InformationsquelleAutor der Antwort ChiperSoft
Anzumerken ist, dass in Apache die PHP - $_SESSION superglobale ist zugänglich über virtualhosts. Betrachten Sie dieses Szenario:
Dies ist nicht so eine große Sache, wenn Sie Steuern alle virtualhosts auf Ihrem server, aber wenn Sie sind auf einer gemeinsamen Maschine, es ist problematisch.
InformationsquelleAutor der Antwort Brendan Berg
Wenn du dich auf einen gespeicherten Wert innerhalb einer session-variable zu bestimmen, Rollen Sie dann die Fähigkeit verlieren, um den Wert zu ändern in der DB und haben Sie sich gegen die Benutzer der aktuellen Sitzung. Wenn man sich bei Zend Framework gibt es eine klare Trennung zwischen Authentifizierung und Autorisierung, und stark formulierter Warnungen in diesem Handbuch, um die minimale Menge an Daten, die in der Sitzung (dh "Ja, er ist user #37 & er angemeldet").
Soweit "Sicherheit" geht - es sei denn, du bist auf shared-host, da gibt es nichts zu befürchten. Auf einem korrekt konfigurierten shared host, sollten Sie relativ sicher sein, auch.
InformationsquelleAutor der Antwort Sean McSomething