Hi Erik,
4.) Basic Authentication
- Digest Authentication
Hab zwar keine Ahnung was das ist...
Beides sind Ausprägungen desjenigen Teils von HTTP, mit dem innerhalb der
HTTP-Header Authentifizierungsinformationen zwischen Server und Client
ausgetauscht werden.
Wenn ein geschützter Bereich des Servers angesprochen wird, dann sendet
der Server als Antwort einen HTTP-Status "Weise Dich aus nach dem Verfah-
ren <name>" (wobei Basic und Digest die beiden möglichen Namen sind), und
der Browser muß seine Anforderung erweitert um diese Informationen wieder-
holen. Um sie einzuholen, führt er mit dem Benutzer einen Dialog (öffnet
eine Box zur Eingabe von Benutzername und Kennwort) oder nimmt diese Werte
aus einem vorherigen Dialog (weil er sie für eine Browser-Sitzung speichert,
nicht aber über sie hinaus - das entspricht der Zielsetzung "Session-Proto-
koll" eigentlich sehr gut).
Der Webserver führt aber in der Tat kein Gedächtnis, ob ein Benutzer auf
dem Server mehrfach eingelogt ist - das müßte die Server-Anwendung selbst
tun (und dabei auch korrekte Logins ggf. ablehnen, wenn die Benutzerkennung
bereits aktiv sein sollte).
Noe. So ist kein Session-Management moeglich. Ich kann sagen, der und
der User war es, aber nicht, obs auch derselbe PC war oder so.
...aber das gilt doch für eine Session-ID auch.
Ob ich nun http://bla.de/x.pl?session=abc von dem Rechner, mit dem
ich mich eingeloggt habe, eingebe oder einem anderen spielt doch auch
keien Rolle, oder sehe ich das falsch?
Wenn Du dieselbe Session-ID im Klartext als CGI-Parameter verwendest,
dann hast Du durchaus recht. Du könntest diesen URL sogar bookmarken
und damit wieder in eine Session "zurückspringen".
Gerade deshalb macht man das aber nicht so, sondern:
a) Man verwendet Cookies, weil man diese in den bisher üblichen Browsern
nicht mit vertretbarem Aufwand editieren kann (dieser Informationsstand
scheint gerade zu veralten). Dann würde ein URL alleine diesen Zugriff
nicht mehr korrekt reproduzieren, weil Informationen aus dem Cookie
fehlen.
b) Man ergänzt die Session-ID in einer Weise, daß Du nicht einfach einen
beliebigen Wert verwenden kannst, weil Du dabei keine korrekte Session-
ID heraus bekommst.
Stell Dir vor, Du hättest während einer Session eine konstante IP-Adresse.
(Das ist überwiegend der Fall und liefert ein anschauliches Beispiel.)
Würde ich Dir eine Session-ID liefern, dann würde ich beispielsweise die
IP-Adresse, die Du mir übertragen hast, in diese Session-ID mit hinein
codieren. Bei jeder weiteren Anfrage kann ich sie wieder extrahieren und
damit feststellen, ob diese Anfrage tatsächlich von demjenigen Client kam,
der sich die Session-ID ursprünglich geholt hat.
Einen Zugriff mit demselben URL von einem anderen PC (mit einer anderen
IP-Adresse) kann ich damit vom ursprünglichen PC unterscheiden; ein
cut&paste in einen anderen Browser desselben PC beispielsweise nicht.
Ich könnte natürlich noch mehr Informationen mit verschlüsseln, etwa den
UserAgent ... oder auch den HTTP_REFERER, falls Dein Browser mir zuverläs-
sig einen solchen sendet. Je mehr Informationen ich in der Session-Kennung
speichere, desto genauer erkenne ich Dich wieder.
Und natürlich muß ich diese Informationen so verschlüsseln, daß zwar ich
selbst sie wieder zerlegen kann, Du aber möglichst keine Chance, die Ver-
schlüsselung zu knacken und Dir selbst gültige Session-IDs anderer laufen-
der Sessions zu berechnen. Die laufenden Sessions sind zudem auf dem Server
gespeichert, und einfach nur eine legale Session-ID zu erzeugen, die nicht
gespeichert ist, nützt gar nichts - es muß schon eine Session-ID sein, die
gerade existiert.
Selbst wenn Du also sämtliche Attribute eines Surfers am PC neben Dir
kennst und dessen Session "übernehmen" willst, kann ich immer noch eine
beliebig lange Zufallszahl in die Session-ID einbinden, die Du nicht in
kurzer Zeit erraten kannst. Diese Zufallszahl ist ebenfalls auf dem Server
gespeichert, so daß ich die Session-ID in minimaler Zeit wieder entschlüs-
seln kann - Du hingegen müßtest alle Kombinationen durchprobieren.
Und da ich darüber hinaus die Session selbst steuere (beispielsweise indem
ich ständig neue Cookies an den Client sende, die selbst immer wieder für
die Validierung des nächsten Zugriffs erforderlich sind - sie könnten bei-
spielsweise die aktuelle Uhrzeit in verschlüsselter Form enthalten und da-
mit innerhalb weniger Minuten "veralten"), müßtest Du die Verschlüsselung
sehr schnell knacken, um "mitspielen" zu können.
Letzten Endes ist "Session" ein heftig unterspezifizierter Begriff.
Es kommt darauf an, was Du an Eigenschaften der Session haben willst,
um ein Modell zu realisieren, welches diese Eigenschaften aufweist.
Viele Grüße
Michael