Hallo Tom,
Aus dem Geschitspunkt der allgemeinen Sicherheit sollte man nicht mehr mit Session-IDs in der URL arbeiten. Cookies erzeugen bestimmt wesentlich weniger Sicherheitslücken, als die Übergabe in der URL.
Ich sehe null Probleme mit Session-IDs in der URL sofern das richtig gemacht wurde.
Ich musste für ein Projekt in ASP (VBScript) eine eigene Session-Verwaltung schreiben.
Beim Erstaufruf wird jedem Link eine generierte SessionId angehängt, gleichzeitig wird die session von ASP mit dieser SessionId gefüllt. Auch ein Eintrag in eine Datenbank erfolgt mit SessionId, Timestamp, UserAgent, IP-Adresse und HTTP_ACCEPT-Werten?
Beim nächsten Aufruf einer Seite im Projekt (natürich muss einem Link gefolgt werden) wird zuerst überprüft ob die SessionId in der ASP-Session-Collection vorhanden ist. Dies würde bedeuten, dass Session-Cookies aktiviert sind und die Session-ID nicht mehr an die Links gebunden wird.
Bei jedem Page-Request wird die Session verlängert (Timestamp wird aktualisiert).
Was sind jetzt die Kritierien für eine gültige Session:
- valider Timestamp (20 Minuten Session Timeout)
- valide IP-Adresse [1]
- valider UserAgent [2]
- valide HTTP-ACCEPT Werte [3]
In dem von dir verlinkten Archiv-Artikel (</archiv/2004/1/70719/#m406911>) hat Sven Vorbehalte gegen das Abgleichen der IP-Adresse [1]:
Aber die IP-Adresse ist absolut sinnlos. Weil sich die ändern kann, auch wenn absolut derselbe User zugreift, bzw. eben doch nicht garantiert für nur einen einzigen User steht!
Bedenke: User haben dynamische IP-Adressen, oder sitzen hinter richtigen NAT-Gateways (die ordnen den Benutzern des privaten Intranets mit vielen IP-Adressen die wenigen (oder die einzige) öffentliche IP des Gateways zu), oder benutzen zwangsweise Proxyfarmen mit Load-Balancing (siehe AOL, Freenet).
Wenn du zwingend erforderst, dass deine Benutzer in einer Session immer dieselbe IP haben, dann verhinderst du bei einem gewissen Prozentsatz eine ordentliche Nutzung.
Merke: Eine IP-Adresse ist kein Garant für den identischen User! Teilweise haben mehrere User die gleiche IP, teilweise wechselt die IP des Users unvorhersehbar.
Ich sehe das nicht wirklich so, vielleicht fehlt mir hier aber auch die Erfahrung. IP-Adressen von einem User sollten nicht ständig wechseln (innerhalb einer Session, typischerweise 5-10 Minuten). Eine IP-Adresse wird doch nur gewechselt, falls der User dies manuell tätigt oder zum Beispiel die Telekom einen Adressen-Wechsel erzwingt (IMHO alle 24h?). Wird sie einmal gewechselt, weil er z.B. um Mitternacht eine neue IP aufgezwungen bekommt: neu einloggen und für die nächsten 24h (?) sollte das Problem nicht mehr auftauchen.
Anders herum, dass mehrere User mit der gleichen IP-Adresse die Seite besuchen, spricht ja nicht gegen das Validieren mit der IP-Adresse sondern eher für das Validieren mit zusätzlichen Kriterien (User-Agent etc.)
[2] Der User-Agent sollte ein recht zuverlässiges Kriterium sein, wenn gleich er nicht als einziges Kriterium validieren darf - es gibt tausende von "Opera/7.51 (Windows NT 5.1; U) [en]".
Wann ändert sich der User-Agent? Bei einem Browserwechsel (Cookies gehen dann auch baden) oder bei einem manuellen User-Agent-Wechsel - selbst schuld!
[3] Als zusätzliches Kriterien überprüfen wir die ACCEPT-Werte. Die sollten sich normalerweise während einer Session nicht verändern. Ok, wenn der User innerhalb der Session grad das Office installiert oder ähnliches, würde im die Session neu gesetzt - auch hier: tja pech gehabt, ist aber eher unwahrscheinlich.
Es gibt hier noch "viel" mehr Kriterien die einfügt werden könnten (ACCEPT Language, ACCEPT Charset... bitte um Hilfe bei dieser Liste *g*). Nichts spricht eigentlich gegen eine lange Liste, ausser dass der User die Session verliert, wenn er etwas an seinem Browser verändert. Dann wird er halt zu seinem Schutz ausgeloggt und muss sich wieder anmelden - so what?
Wo wird diese SessionId auftuchen? Erwähnt wurden Google (hab ich noch nicht bemerkt: diese Suche http://www.google.com/search?sourceid=mozclient&ie=utf-8&oe=utf-8&q=inurl%3APHPSESSID ergibt keine Resultat mit Session-IDs in den jeweiligen URLs), also bleiben noch Referrer in den Log-Files.
Erstens müssen die gezielt gesucht und benutzt werden, vom jeweiligen Siteadmin, dann muss er mit gleicher IP-Adresse [4] und allen oben erwähnten Kritieren vorbeischauen - eher unwahrscheinlich [4] bis sehr selten.
[4] Ein bisschen anders sieht es in Intranets aus oder Seiten die auf dem Firmenwebserver. Dort können entweder die Referrer vom Admin (Intranet) ausgewertet werden oder es kommen alle Mitarbeiter mit der gleichen IP in die DMZ.
Hier wäre eine HTTP-Authentifizierung wahrscheinlich sinnvoller.
Just my 16 cents zu dieser Thematik.
Grüsse
Siramon,
ja der Penner aus Nr. 14