Session-Handling (Sessionverwaltung)

23. November 2008

Das Session-Handling (englisch ungefähr: Sitzungs-Verwaltung) einer Web-Anwendung dient dazu,  unterschiedliche Benutzer technisch auseinanderzuhalten.

Funktionsweise des Session-Handlings

  1. Ein Benutzer oder eine Benutzerin A fragt erstmalig eine Webseite ab
  2. Die Webseite denkt sich eine für die Dauer einer Sitzung eindeutige Kennung aus (eine Session-ID)
  3. Bei der Antwort gibt die Webseite sowohl die regulären Inhalte der Webseite, als auch die Session-ID mit
  4. Beim nächsten Aufruf der Webseite gibt der Browser seinerseits die Session-ID wieder mit
  5. Die Webseite überprüft, ob die eben vom Browser erhaltene Session-ID gültig ist – sie könnte ja zum Beispiel gefälscht oder bereits abgelaufen sein. Und wenn die Session-ID gültig ist weiß die Webseite, dass es sich beim Aufruf wahrscheinlich um den Benutzer oder die Benutzerin A handelt

Wie wird die Session-ID mitgegeben?

In dem Beispiel oben wird klar, dass die Webseite und der Browser ständig die Session-ID hin- und herreichen müssen. Technisch geht das über zwei Wege:

  1. Die Session-ID wird als Parameter in der URL mitgeschleift
  2. Die Session-ID kommt in ein HTTP-Cookie hinein

1. Die Session-ID in der URL

Auf den ersten Blick wirkt diese Methode etwas unschön, weil die URL einer Seite ständig um einen Teil für die Session-ID verlängert wird. Das heißt, aus /index.php wird dann so etwas wie /index.php?sessionid=1234567890. Die Webseite muss immer daran denken, den Session-ID-Parameter anzuhängen, sonst ist der Benutzer oder die Benutzerin plötzlich unfreiwillig ausgeloggt. Dieses Handling ist nicht immer trivial, insbesondere wenn die Webseite mit mehr als einem Content-Management-System arbeitet.

Eigentlich sollten URLs mit Session-IDs nach den heutigen Maßstäben aus zwei Gründen vermieden werden. Der erste Grund ist eher kosmetischer Natur: die Adressen sind für die Benutzer schwer lesbar. Der entscheidende Grund liegt aber bei den Suchmaschinen. Wenn diese bei jedem Aufruf einer Seite eine neue Session-ID präsentiert bekommen, erkennen sie oft nicht, dass es sich eigentlich immer um die gleiche Seite handelt. Aus der Perspektive der Suchmaschinen haben Sie dann statt einer guten Seite eine große Zahl an Seiten mit identischem Inhalt. Sie schneiden dann schon aus technischen Gründen schlecht bei den Suchmaschinenresultaten ab und limitieren das Potential ihrer Webseite erheblich!

Nach den negativen Argumenten entdeckt der zweite Blick auf die Methode aber auch einen großen Vorteil. Sie funktioniert nämlich ohne Cookies. Viele Benutzerinnen und Benutzer wollen heute bewusst auf Cookies verzichten. Mit der Session-ID in der URL können Sie diese Gruppe bequem bedienen.

In der Praxis wird oft ein Kompromiss angewandt. Bei anonymen Benutzern, wie es zum Beispiel meist auch die Suchmaschinen sind, wird auf die Session-ID einfach verzichtet. Eingeloggte Benutzer hingegen erhalten die Session-ID angehängt.

2. Die Session-ID im Cookie

Analog der obigen Argumentation erscheint es auf den ersten Blick verlockend, die Session-ID in HTTP-Cookies abzuspeichern. Die Vorteile liegen auf der Hand: es gibt saubere und klar lesbare URLs, die Suchmaschinen erhalten eine klare Seitenstruktur, ihre Applikationen haben kein Problem mit dem Durchschleifen der Session-IDs.

Der gravierende Nachteil ist allerdings, dass Sie keine User bedienen können, die ihre Cookies abgeschaltet haben. Häufig sind Webseiten nicht darauf ausgelegt, dass die User keine Cookies akzeptieren. Die User landen dann in einer endlosen Umleitungs-Schleife oder bekommen vielleicht sogar den Hinweis, dass die Seite ohne Cookies nicht benutzbar ist. Beides hinterlässt einen denkbar schlechten Eindruck.

Beide Verfahren nutzen

Wenn möglich sollten Sie also doppelgleisig fahren. Nutzen Sie Cookies für die Session-ID, wenn die Benutzerinnen oder der Benutzer es erlauben. Falls sie es nicht erlauben, verzichten Sie bei anonymem Gebrauch einfach auf die Session-ID. Und bei eingeloggten Userinnen und Usern hängen Sie die Session-ID als Parameter an die URL.

PHP – Wo ist die php.ini-Datei?

Die Programmierspache PHP kommt von Haus aus mit umfangreichen Session-Funktionalitäten, nähere Informationen bei den Weblinks unten. Die Grundeinstellungen für die Session-Verwaltung werden in der Konfigurationsdatei php.ini eingestellt. Wenn Sie nicht wissen, wo sich Ihre php.ini-Datei befindet, dann rufen Sie einfach eine Testseite auf, bei der Sie den folgenden Code eingefügt haben:

<?php print phpinfo(); ?>

Session-Diebstahl

Das Thema sieht sicherlich jetzt schon recht kompliziert aus. Und das hat auch seinen Grund, denn mit dem Session-Handling muss eine fehlende Eigenschaft der Web-Kommunikation über HTTP umständlich eingebaut werden. Und weil es so umständlich ist, gibt es eine ganze Reihe an Sicherheitslücken, über die Angreifer die Session-Daten stehlen und damit praktisch die Identität der Angegriffenen übernehmen können.

Das Prinzip ist jedes mal ähnlich. Die Angreifer erbeuten die Kenntnis um die aktuell genutzten Sitzungs-Cookies oder Session-IDs und benutzen sie dann selbst. Jede Session-Verwaltung sollte darum wissen und sich an ein paar Grundregeln halten:

  • Eine Session-Kennung muss beim Eröffnen der Session generiert werden. Sie darf nicht vorhersagbar sein
  • Eine Session-Kennung darf nur für eine Session gültig sein. Die Session-Dauer muss daher klar definiert sein (zum Beispiel: ausloggen der User, halbe Stunde Inaktivität)
  • Es darf nicht möglich sein, die gleichen Session-Kennungen für zwei parallele Sitzungen zu benutzen. Im Zweifelsfall sollten idealerweise gleich beide Sitzungen beendet werden. Das weckt die Aufmerksamkeit der Angegriffenen und beugt Angriffen wie der sog. Cookie-Injection vor
  • Eventuell sollte außer den Sessiondaten noch ein zweites Identitätsmerkmal herangezogen werden. Damit ist natürlich die IP-Adresse gemeint. Problem: einige ISPs arbeiten mit vielen parallelen IP-Adressen. Benutzer von AOL kennen die Problematik und erhalten daher von vielen Webseiten Sonderbehandlungen: AOL-Zugriffe wechseln nämlich die IP-Adresse bei praktisch jedem Zugriff. Die IP muss dann dementsprechend lax ausgewertet werden, was die Sinnhaftigkeit der Prüfung stark einschränkt.

Weblinks

Literatur

Speichern
  • MisterWong.DE
  • Webnews.de
  • Digg
  • del.icio.us
  • Facebook
  • Google

Schlagworte: , , , , ,

1 Kommentar zu „Session-Handling (Sessionverwaltung)“

  1. Andreas Pfund sagt:

    Eine weitere gute und vor allem sichere Möglichkeit ist den Apache durch mod_rewrite das Sessionhandling übernehmen zu lassen. Dabei schneidet man per mod_rewrite die Session ID aus der URL und legt sie in einer Umgebungsvariable ab.

Kommentieren


Über WebmasterCoffee - Archiv - Impressum