Hi!
Das Session-Modul bietet keine Garantie dafür, dass Informationen, die Sie in einer Session speichern, nur vom Benutzer gesehen werden können, der die Session erzeugt hat. Sie müssen zusätzliche Maßnahmen ergreifen, um die Integrität der Session ihrer Wichtigkeit entsprechend angemessen aktiv zu schützen.
Das bezieht sich vermutlich darauf, dass sich eine Session übernehmen lässt, wenn man die Session-ID eines anderen Users kennt. Wenn ich also die Session-ID kenne, mit der du im Moment bei einem Webservice eingeloggt bist, kann ich ohne mich einzuloggen direkt auf die anschließenden Seiten springen, vorrausgesetzt es wird die Session-ID nicht serverseitig noch mit User-Agent oder IP verbunden.
Ich bin mir nicht mehr ganz sicher, aber:
In ruby konnte man einfach den HTTP header vor die auszugebenden daten schreiben. So kann man auch sessions und cookies erzeugen.
Der Header ist natürlich beeinflussbar. Cookies (welche meistens auch für Sessions benötigt werden) werden über die HTTP-Header gesetzt. Bei dem Session-System von PHP wird ein Cookie mit einer eindeutigen ID übertragen, und dann lassen sich Daten dieser ID zuordnen. Die Daten werden aber serverseitig gespeichert. Der Client muss nur die Session-ID übertragen, um festzulegen, welche Daten zu ihm gehören.
Und da steht gar nichts über HTTP an sicher, das ist nur an der oberflächer gekratzt. Morgen die RFC.
Das ist vollkommen unabhängig von der HTTP-RFC. Es geht doch nur darum dass die eigentlichen Daten serverseitig gespeichert werden, und nur die Session-ID clientseitig!
Ich habe gerade zwei PHP-Dateien erstellt, test1.php sieht so aus:
<?php session_start(); $_SESSION["xyz"] = 123; ?>
test2.php sieht so aus:
<?php session_start(); var_dump($_SESSION["xyz"]); ?>
Wenn man erst test1.php aufruft, kommt als Antwort der Befehl zum Cookie-Setzen zurück, in dem eine PHPSESSID steht ("Set-Cookie: PHPSESSID=4665906f77bb1f1e3e8400c1da299d78; path=/"; das path hat dabei laut RFC folgende Bedeutung:
Path=value
OPTIONAL. The value of the Path attribute specifies the subset of
URLs on the origin server to which this cookie applies.). Beim Aufrufen der zweiten Seite wird die im Cookie gespeicherte Session-ID wieder mit zum Server übertragen ("Cookie: PHPSESSID=4665906f77bb1f1e3e8400c1da299d78"), und dieser gibt "int(123)" nach ein paar Headern ohne irgendwelche Informationen (weder Session-ID noch der in der Session gespeicherten Daten) zurück.
Auch mein Browser sagt, er hat als Cookie nur irgendein "PHPSESSID=4665906f77bb1f1e3e8400c1da299d78" gespeichert. In /tmp auf meinem Rechner, wo mein Apache-Server seine Session-Daten speichert (lokal) hingegen wird eine Datei namens "sess_4665906f77bb1f1e3e8400c1da299d78" erzeugt, in der "xyz|i:123;" steht. Das Mitloggen per Ethereal hat ebenfalls ergeben dass _nur_ die Session-ID übertragen wird, nicht der Inhalt der Session - auf Anfrage schicke ich dir auch einen vollständigen Ethereal-Log der Daten.
Schöne Grüße
Julian
"Hex is for sissies. Real men use binary. And the most hardcore types use only z
eros - uppercase zeros and lowercase zeros." - Tomasz Sowinski