phpbar.de logo

Mailinglisten-Archive

[php] Sichere Authentifizierung

[php] Sichere Authentifizierung

tb at media-net.de tb at media-net.de
Sam Jun 11 23:22:50 CEST 2005


>> Hier sehe die Schwachstelle, dass die Session-ID sowohl auf dem
>> Server als auch beim Client theoretisch (!) von unbefugten
> Warum theoretisch.
> Auch praktisch ganz simpel: sieh einfach nach was als Cookie
> gespeichert ist. z.B. PHPSESSIONID = acf1232acf...
>> ermittelt werden kann, sofern diese Zugang zu den Systemen haben.
> Jeder Benutzer eines Browsers hat Zugriff auf die Cookies, die der
> Browser gespeichert hat.

Ja, richtig. Aber in diesem Fall muss sich eine "unbefugte" Person am
Rechner befinden. Der "trusted"-User hat ja auch die Zugangsdaten und
der Cookie wird nach Beendigung des Browsers gelöscht, sofern man die
Haltbarkeit entsprechend einstellt hat. Ein Restrisiko bleibt natürlich.
 
>> Serverseitig reicht dafür ein Lesezugriff auf den Session-Ordner
>> (session.save_path). Clientseitig könnte die Session bei
>> "--enable- trans-id" im Quelltext der gerenderten Seite
>> eingesehen werden. Dazwischen wäre der Zugriff auf die ID
>> ebenfalls möglich, wenn der Request nicht über eine gesicherte
>> Verbindung erfolgt.
> 
> Serverseitig ist das Problem doch leicht zu lesen, indem
> session.save_path nur durch den Usernamen des Webservers und des
> Eigentümers lesbar ist.
> session.save_path kannst Du auch in der Anwendung setzen, sollte
> aber natürlich außerhalb des DOCUMENT_ROOT-Pfades liegen.

Ja. Dann könnte aber ein anderes Skript - z.B. das eines anderen
Vhosts - theoretisch immer noch auf den Ordner zugreifen. Mit dieser
Lösung wäre aber der Zugriff zumindest auf den user des webservers
beschränkt (chmod go-rwx)

> Die Einwendung des Zugriffs auf dem Weg zwischen Server und Client
> gilt für alle ungesicherten Übertragungen also auch für HTTP_AUTH.

Ja, richtig. 

>> Das Problem der Sichtbarkeit der ID im Filesystem kann man durch
>> eine Verlagerung des Speicherorts in eine Datebank umgehen. Die
>> php-Datei mit den DB-Zugangsdaten könnten m.E. mit Zend
>> kompiliert werden.
> Richtig.
> 
> 
> Das eigentliche Problem stellt hier die evtl. Möglichkeit dar, dass
> User auf dem Server die Sessiondateien öffnen und lesen können. Das
> lässt sich durch oben genanntes Verfahren verhindert werden.

schlimmer :) es reicht in den meisten fällen ein "ls /tmp" und
dieser ordner ist aufs system bezogen "wordlwide" lesbar.
Voraussetzung ist natürlich, dass ein unbefugter User am System
angemeldet ist.
 
> Ob jemand das Cookie mit der Session-ID ausliesst spielt keine
> Rolle, da eine (sehr leicht mögliche Manipulation) der Session-ID
> nur durch einen sehr, sehr unwahrscheinlichen Zufall eine neue ID
> hervorzaubert, zu der es eine aktive Session auf dem Server gibt.
> 
> Achte auf auf die Garbage-Collection, sorge dafür, dass inaktive
> Sessions nach kurzer Zeit zerstört werden, etc.
> 
> Achte auch darauf, dass nicht durch XSS-Attacken u.ä. evtl. Sessions
> Deiner User gestohlen bzw. entführt werden können
> (Session-Highjacking).

Hast du dazu einen Link parat?
 
> So wirst Du eine sichere Authentifizierung Deiner User auch mit
> Sessions erreichen.

herzlichen dank für dein feedback!

gruss, thomas



php::bar PHP Wiki   -   Listenarchive