Ein letztes Mal Hallo! ;)
Ihr verwirrt mich ganz schön ;-)
Der Cookie wird wohl nirgendwo geloggt und um da
dran zu kommen müßte man nicht nur an irgendwelche
Logfiles kommen, sondern an einem der Rechner oder
irgendwo dazwischen lauschen, was meiner Meinung
nach ein ganz erheblicher Unterschied ist!
dasselbe gilt aber auch für den UserAgent - beides
sind HTTP-Header.
EBEN NICHT!!! Der USer-Agent wird oft in Logfiles direkt neben dem referer geschrieben, da hat man ja direkt beides zusammen, da braucht man dann nicht mehr viel raten, daher meine Bedenken in diese Richtung! Der Cookie dagegen kann nur durch lauschen "abgefangen" werden, IMHO ein erhebliche Unterschied! Oder wo werden cookies geloggt????
Man kann Cookies auch loggen. Man kann so ziemlich alles loggen, was der Webserver erfährt. Apache ist da sehr flexibel.
ich gehe jetzt von dem Szenario aus, das ich mit SSL verschlüssel. Das heißt, lauschen ist wirklich nur mit sehr hohem Aufwand möglich, denke ich. Also soßllte ein cookie schonmal sicher sein, genauso alle anderen Daten die in keinen Logfiles erscheinen und immer unverändert bleiben. Jetzt ist nur noch die Frage, ob es noch Sinn macht zu der Session ID, die wenn möglich auch in einem cookie übertragen wird, noch den User-Agent zu verwenden - bringt das noch einen großen Gewinn an Sicherheit?
Mit jedem Byte zusätzlicher Länge der Session-ID erhöhst du potentiell den Rateaufwand um das 16 bis 256fache - je nach Zeichenbereich. Wenn du die Session-ID also sehr lang machst, lohnt sich ein Raten kaum noch, und Zufallsergebnisse sind dann extrem selten. Ich hatte dir ja aber schon vorgerechnet, daß die normalen PHP-Sessions ziemlich unmöglich auszuprobieren sind, und auch Raten trifft extremst viel seltener, als 6 Richtige im Lotto.
Ich weiß jetzt nicht wie groß sich der Aufwand eine SessionId aus Logfiles oder wie auch immer zu bekommen, vom Aufwand die SessionID + dazugehörigen User-Agent zu bekommen, unterscheidet. Wenn im Cookie eine md5-codierte Kombination aus Zufallszahl und microtime() steht, sollte die auch schwer zu erraten sein, geschweige denn ohne gelauscht zu haben ins blaue einen Cookie zu erstellen. Das ist ja nicht nur ne Ascii Datei, sondern auch irgendwie eindeutig einem Server zugeordnet, und wie man das nachbildet ist meines Wissens nicht einfach.
Wenn du nur die Session-ID benutzt, hast du praktisch keinen Zusatz-Programmieraufwand dafür. Wenn du zusätzliche Merkmale prüfen willst, die aber absolut nicht fälschungssicher sind, hast du den Zusatzaufwand, das auf dem Server irgendwo zu speichern und zu prüfen.
Ein Cookie ist HTTP-technisch betrachtet einfach nur ein weiteres Feld des Headers. Es ist keine ASCII-Datei (bedenke: Nur der IE legt pro Server eine einzelne Cookie-Datei an, der Netscape packt alle Cookies in _eine_ Datei). Wenn man das imitieren will, braucht man lediglich ein Programm, welches als HTTP-Client auftreten kann und in der Lage ist, selbstdefinierte HTTP-Header (also zum Beispiel die eines beliebigen Browsers inklusive Cookies etc.) zu senden und die Antwort des Servers entgegenzunehmen. Es wäre unwahrscheinlich anzunehmen, daß ein Angreifer Session-IDs per Hand in die URL eintippert - das machen, wenn überhaupt, Skripte.
Ich tendiere aber im Augenblick anstatt User-Agent eher zur PHP-Funktion get_browser(), ist in diesem Falle ja egal wie genau das ist, Hauptsache konstant - der Vorteil: Die Funktion bezieht Ihre Informationen nucht nur aus dem user-Agent, also ist die Hürde wieder eine Stufe höher angelegt, denke ich. Vielleicht sollte man auch beides noch kombinbieren, naja...
get_browser() untersucht den User-Agent und zieht aufgrund dessen Informationen aus einer lokalen Datenbank. Damit gewinnst du nichts, sondern generalisierst. Aus einem T-Online-IE 5.5 mit netter Seriennummer (irgendwelche User-Agents haben recht individuelle Zahlenkombinationen drin) wird dann ein ganz allgemeiner IE 5.5 - da alle IEs Javascript, JScript und VBScript können, kriegst du bei diesen Daten immer "ja" als Antwort, auch wenn es abgeschaltet ist. Mit anderen Worten: Nicht empfehlenswert.
- Sven Rautenberg