Moin!
ich übergebe die PHPSESSID über die URL, wenn kein Cookie gesetzt werden kann. Wie kann man verhindern, dass jemand mit ?PHPSESSID=http://... in der URL fremden PHP-Code ausführen kann?
Ich verstehe die Frage nicht.
In der Tat kann ein Angreifer sich relativ beliebige Session-IDs ausdenken und diese vordefiniert dem Server übergeben. PHP würde dann anstelle einer zufällig generierten Session-ID einfach die generierte ID übernehmen. Solch ein Vorgang bietet Angriffsfläche für Session-Hijacking (wenn der Angreifer dem Opfer einen Link mit vordefinierter Session-ID zuschickt, muß er diese Session-ID nicht raten, sondern kann nach erfolgter Authentifizierung die Session übernehmen).
Allerdings funktioniert Session-Hijacking nur, wenn das Opfer dem Link tatsächlich folgt, und wenn die PHP-Applikation die Session-ID tatsächlich unverändert übernimmt. Aber es besteht ja immer die Möglichkeit, entweder bei jedem Request, oder aber zumindest bei Zugriff auf die Authentifizierungsmaske oder den nachfolgenden Schritt die Session-ID neu zu generieren, um genau solche Angriffe zu vereiteln.
Alternativ würde auch ein geprüftes Einschränken der Session-ID zwingend auf Cookies helfen, solche Angriffe zu unterbinden.
PHP prüft übrigens selbst, ob der Wert für die Session-ID gewissen Formalien genügt. Die Fehlermeldung, sollte man als ID eine URL übermitteln wollen, lautet (bei PHP 5.1, die URLs sind anonymisiert):
http://www.example.com/test.php?PHPSESSID=http://www.example.com/index.php
"Warning: session_start() [function.session-start]: The session id contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in /var/www/www.example.com/htdocs/test.php on line 3"
Insofern besteht die von dir beschriebene Angriffsmöglichkeit gar nicht.
Und selbst wenn URLs erlaubt wären, müßte immer noch der standardmäßige Session-Save-Handler diese URL auch als solche interpretieren, und anstelle der Session-Datei auf der Festplatte die Remote-Ressource öffnen.
Aber selbst das würde nur die Injection von Session-Variablen ermöglichen, nicht das Injizieren von fremdem Code (wobei das Leaking von Sessionwerten natürlich schon ein Sicherheitsproblem wäre).
Könntest du also einfach etwas deutlicher beschreiben, wo du dein Problem siehst?
- Sven Rautenberg
"Love your nation - respect the others."