invalid_session - neuer Lösungsansatz?
Verfasst: 30.01.2003 21:26
Hallo zusammen,
nachdem ja schon mehrfach über das invalid_session-Problem bei der 2.0.4 berichtet wurde, hab ich mir dazu auch ein paar Gedanken gemacht.
1. Wieso wurde das geändert?
Mit der Änderung sollen zwei mögliche Angriffsmöglichkeiten unterbunden werden:
Da der Fehler 'Invalid_session' bei dem 2. Punkt auftritt, betrachtet wir zuerst diesen:
Dort tritt der Fehler auf, wenn die vom absendenden Formular übergebende Session-ID nicht mit der in den Benutzerdaten ($userdata[]) hinterlegten übereinstimmt. Dabei werden die Benutzerdaten aus der Session-Tabelle genommen, sofern die ersten drei Oktetts der IP-Adresse mit der in der Session-Tabelle übereinstimmen (der Grund dafür ist oben genannter Punkt 1), ansonsten wird eine neue generiert (Hinweis für die Code-Leser: der UPDATE-Teil in der Funktion session_begin(...) (sessions.php) ist in diesem Fall meiner Ansicht nach nie erfolgreich).
Siehe auch: http://www.phpbb.com/phpBB/viewtopic.php?t=69493
3. Wann tritt das Problem auf?
Die Meldung 'Invalid_session' tritt dann auf, wenn folgende Bedingungen erfüllt sind:
4. Lösungsansatz
Es existieren Lösungsansätze für das Problem, die i.d.R. darauf basieren, dass der Schutzmechanismus für das erste Problem reduziert oder abgeschaltet ist. Die Frage ist, ob es auch andere Wege gibt, dieses Problem zu vermeiden, ohne das Sicherheitsniveau zu reduzieren.
Bei Überlegungen dazu kam mir folgende Idee: i.d.R. wird beim Surfen im Web auch eine Information übertragen, die einen Verweis auf die Seite enthält, von der aus auf die aktuelle Seite gesprungen wurde. Wenn wir diesen String auswerten, können wir feststellen, ob der Aufruf von einer Seite innerhalb unseres Boards kam oder nicht (dabei müssen wir jedoch sicherheitshalber die Datei viewtopic.php ausnehmen, da wir dort keine Kontrolle über den Inhalt haben). Kommt der Aufruf aus dem Hauptverzeichnis des Boards oder dem Admin-Verzeichnis, können wir die beiden Angriffe ausschließen (es sei denn, unser Server wurde gehackt - aber dann ist sowieso alles zu spät). Somit können wir in genau diesem Fall auf den IP-Check verzichten und damit das Problem lösen
(und wer keinen Referer übermittelt ist halt selbst schuld).
Meine Bitte:
Vielleicht kann der ein oder andere von euch diesen Gedankengang nochmals prüfen, bevor ich ihn dann implementieren kann und auf phpbb.com poste.
Gruß (und Danke),
Philipp
nachdem ja schon mehrfach über das invalid_session-Problem bei der 2.0.4 berichtet wurde, hab ich mir dazu auch ein paar Gedanken gemacht.
1. Wieso wurde das geändert?
Mit der Änderung sollen zwei mögliche Angriffsmöglichkeiten unterbunden werden:
- Die Möglichkeit, eine z.B. über den Referer des Browsers erfahrene Session-ID zu benutzen, um auf das Forum mit Moderator- oder Admin-Rechten zugreifen zu können
- Die Möglichkeit über ein Formular gezielt Daten an eine Seite des Forums zu schicken, die dann - wenn das AutoLogin-Feature aktiviert ist - Beiträge löscht oder dergleichen.
Da der Fehler 'Invalid_session' bei dem 2. Punkt auftritt, betrachtet wir zuerst diesen:
Dort tritt der Fehler auf, wenn die vom absendenden Formular übergebende Session-ID nicht mit der in den Benutzerdaten ($userdata[]) hinterlegten übereinstimmt. Dabei werden die Benutzerdaten aus der Session-Tabelle genommen, sofern die ersten drei Oktetts der IP-Adresse mit der in der Session-Tabelle übereinstimmen (der Grund dafür ist oben genannter Punkt 1), ansonsten wird eine neue generiert (Hinweis für die Code-Leser: der UPDATE-Teil in der Funktion session_begin(...) (sessions.php) ist in diesem Fall meiner Ansicht nach nie erfolgreich).
Siehe auch: http://www.phpbb.com/phpBB/viewtopic.php?t=69493
3. Wann tritt das Problem auf?
Die Meldung 'Invalid_session' tritt dann auf, wenn folgende Bedingungen erfüllt sind:
- Es wird ein Formular übermittelt, dass mit der entsprechenden Sicherheitsüberprüfung ausgestattet ist
- Die IP-Adresse des Benutzers hat sich in der Zwischenzeit in den ersten drei Oktetts geändert (tritt vor allem bei AOL auf)
4. Lösungsansatz
Es existieren Lösungsansätze für das Problem, die i.d.R. darauf basieren, dass der Schutzmechanismus für das erste Problem reduziert oder abgeschaltet ist. Die Frage ist, ob es auch andere Wege gibt, dieses Problem zu vermeiden, ohne das Sicherheitsniveau zu reduzieren.
Bei Überlegungen dazu kam mir folgende Idee: i.d.R. wird beim Surfen im Web auch eine Information übertragen, die einen Verweis auf die Seite enthält, von der aus auf die aktuelle Seite gesprungen wurde. Wenn wir diesen String auswerten, können wir feststellen, ob der Aufruf von einer Seite innerhalb unseres Boards kam oder nicht (dabei müssen wir jedoch sicherheitshalber die Datei viewtopic.php ausnehmen, da wir dort keine Kontrolle über den Inhalt haben). Kommt der Aufruf aus dem Hauptverzeichnis des Boards oder dem Admin-Verzeichnis, können wir die beiden Angriffe ausschließen (es sei denn, unser Server wurde gehackt - aber dann ist sowieso alles zu spät). Somit können wir in genau diesem Fall auf den IP-Check verzichten und damit das Problem lösen

Meine Bitte:
Vielleicht kann der ein oder andere von euch diesen Gedankengang nochmals prüfen, bevor ich ihn dann implementieren kann und auf phpbb.com poste.
Gruß (und Danke),
Philipp