Eine Session-ID (engl.: session identifier, dt.: Sitzungs-ID) wird bei Anwendungen auf zustandslosen Protokollen als Identifikationsmerkmal verwendet, um mehrere zusammengehörige Anfragen eines Benutzers zu erkennen und einer Sitzung zuzuordnen. Insbesondere bei Webanwendungen finden Session-IDs breite Verwendung.
Inhaltsverzeichnis |
Im World Wide Web werden Dienste aller Art mit Hilfe des Protokolls HTTP angeboten. Diese Dienste bestehen häufig aus mehreren zusammengehörigen Anfragen und Antworten. Um beispielsweise in einem Webshop etwas einzukaufen, durchstöbert der Benutzer zuerst den Katalog, lässt sich einige Artikel im Warenkorb vormerken und führt dann die Bestellung aus.
So komplizierte Vorgänge werden von HTTP jedoch nicht direkt unterstützt, denn es ist ein zustandsloses Protokoll. Eine HTTP-Anfrage liefert nur eine einzige Webseite zurück und merkt sich nicht, welcher Benutzer dazugehört. Um mehrere solche Anfragen zusammenzufassen und dem Benutzer zuzuordnen, wird jeder Anfrage eine Session-ID mitgeschickt. Diese Session-ID kann sich die Webanwendung merken und so die einzelnen Anfragen zuordnen.
Die Session-ID, auch Sitzungsnummer, wird vom Server zu Beginn einer Sitzung (Session) erzeugt. Die Session-ID muss mit der Antwort des Servers zum Client übertragen werden und von diesem bei jedem weiteren Zugriff auf den Server mitgeliefert werden. Mit Hilfe der eindeutigen Session-ID können die serverseitig gespeicherten Daten (Beispiel: Warenkorb) bei jedem Zugriff eindeutig mit einem Benutzer verbunden werden.
Die Session-ID muss also mit jeder Antwort des Servers erneut an den Client übertragen werden. Eine Anfrage, die die Session-ID nicht enthält wird als erste Anfrage einer neuen Session gesehen, der Benutzer verliert also seine bisherige Session.
Technisch kann die Übertragung der Session-ID durch sogenannte Cookies, Einfügen in die URIs oder unsichtbare Formularfelder erreicht werden.
Da die Funktion eines Cookie vom Server nicht vorausgesetzt werden kann, unterstützen viele Anwendungen beide Übertragungsformen: Bei der ersten Antwort wird die Session-ID sowohl als Cookie als auch in den URIs übertragen. Enthält die nächste Anfrage die Session-ID als Cookie, werden die URIs für den Rest der Session nicht mehr modifiziert.
input-Elemente des Typs „hidden") gespeichert. Weil auch der HTML-Quellcode modifiziert werden muss, kann diese Methode ergänzend oder alternativ zur Übertragung in der URI eingesetzt werden.Welche Übertragungsart für die Session-ID auch gewählt wird, im Endeffekt vertraut der Server darauf, dass der Client die selbe ID zurücksendet, die ihm übertragen wurde. Ein Benutzer kann aber, da er die Clientseite kontrolliert, eine beliebige Session-ID zurücksenden. Sollte diese Session-ID mit der eines anderen Benutzers übereinstimmen, ist das Ausspähen und Manipulieren der Daten anderer Benutzer möglich.
Es ist also von höchster Wichtigkeit, dass Session-IDs nicht erraten werden können. Dies wird in der Regel dadurch erreicht, dass die Session-ID zufällig aus einem Wertebereich ausgewählt wird, der so groß ist, dass er nicht durchsucht werden kann, und die Wahrscheinlichkeit, zufällig auf eine gerade verwendete Session-ID zu stoßen, extrem gering ist.
Mögliche Angriffe auf eine bestehende Sitzung werden unter Session Hijacking beschrieben. Der Ansatz, als Angreifer eine gültige Session zu erstellen und einem anderen Benutzer unterzuschieben, wird als Session Fixation bezeichnet.