Sessions absichern

Hallo,

wie kann ich Session vor Diebstahl schützen, also wenn jemand einen Link
aus Versehen irgendwo mit SessionID postet und ein anderer diesen Link
öffnet. Ich habe etwas von Secure-Cookies gelesen, aber ich möchte, daß
die Sessions auch ohne Cookies funktionieren.

Wie stelle ich also sicher, daß nur die Person Zugriff auf die Session
hat, die sie eröffnet hat? Abfrage von Browser Version etc. ist ja nicht
mehr wirklich ausreichend.

Gruß,
Oliver
Oliver Benning [ Do, 02 August 2007 17:41 ] [ ID #1785344 ]

Re: Sessions absichern

Oliver Benning schrieb:
> Hallo,
>
> wie kann ich Session vor Diebstahl schützen, also wenn jemand einen Link
> aus Versehen irgendwo mit SessionID postet und ein anderer diesen Link
> öffnet. Ich habe etwas von Secure-Cookies gelesen, aber ich möchte, daß
> die Sessions auch ohne Cookies funktionieren.
>
> Wie stelle ich also sicher, daß nur die Person Zugriff auf die Session
> hat, die sie eröffnet hat?

Absolut geht es nicht. Aber die Verwendung von session_regenerate_id()
ist schon mal ein großer Schritt in die richtige Richtung.
thorny [ Do, 02 August 2007 17:51 ] [ ID #1785345 ]

Re: Sessions absichern

Oliver Benning schrieb:

>Ich habe etwas von Secure-Cookies gelesen, aber ich möchte, daß die
>Sessions auch ohne Cookies funktionieren.

Cookies wären aber das Mittel der Wahl, da an diese (zumindest versehentlich)
niemand außer dem Besitzer und der setzenden Site herankommt.
Du solltest das zumindest falls verfügbar anbieten.

--
Wolfgang Fellger
Wolfgang Fellger [ Do, 02 August 2007 18:05 ] [ ID #1785346 ]

Re: Sessions absichern

Ad 2007-08-02, Torsten Zühlsdorff <thorny [at] meisterderspiele.de> dixit:
> Oliver Benning schrieb:

>> wie kann ich Session vor Diebstahl schützen,
>> [...]
>>
>> Wie stelle ich also sicher, daß nur die Person Zugriff auf die
>> Session hat, die sie eröffnet hat?

> Absolut geht es nicht. Aber die Verwendung von
> session_regenerate_id() ist schon mal ein großer Schritt in die
> richtige Richtung.

Ja, wird hier auch verwendet. Aber Vorsicht: Die alte Session-Datei
bleibt auf der Platte liegen, bis sie vom System weggeraeumt wird.
Auf einer stark frequentierten Seite kann das problematisch werden,
wenn man session_regenerate_id() gleich nach session_start()
einbaut, auch wenn es verlockend ist. Es empfiehlt sich, dafuer eine
Zeitschaltuhr einzuprogrammieren.

Grusz,

Peter Blancke

--
Hoc est enim verbum meum!
Peter Blancke [ Do, 02 August 2007 18:08 ] [ ID #1785347 ]

Re: Sessions absichern

Oliver Benning schrieb:
> Wie stelle ich also sicher, daß nur die Person Zugriff auf die Session
> hat, die sie eröffnet hat? Abfrage von Browser Version etc. ist ja nicht
> mehr wirklich ausreichend.

Du könntest zum Beispiel in der Session auch die IP oder den User-Agent
des Besuchers loggen und bei jedem Seitenaufruf sicherstellen, dass die
Session nach wie vor zur IP oder dem Agent gehört. Das ist auch nicht
absolut sicher, killt aber wahrscheinlich nahezu alle Hijacker direkt.


Gruß,
Habbo
bruening [ Fr, 03 August 2007 08:42 ] [ ID #1786371 ]

Re: Sessions absichern

Peter Blancke schrieb:
> Ad 2007-08-02, Torsten Zühlsdorff <thorny [at] meisterderspiele.de> dixit:
>> Oliver Benning schrieb:
>
>>> wie kann ich Session vor Diebstahl schützen,
>>> [...]
>>>
>>> Wie stelle ich also sicher, daß nur die Person Zugriff auf die
>>> Session hat, die sie eröffnet hat?
>
>> Absolut geht es nicht. Aber die Verwendung von
>> session_regenerate_id() ist schon mal ein großer Schritt in die
>> richtige Richtung.
>
> Ja, wird hier auch verwendet. Aber Vorsicht: Die alte Session-Datei
> bleibt auf der Platte liegen, bis sie vom System weggeraeumt wird.
> Auf einer stark frequentierten Seite kann das problematisch werden,
> wenn man session_regenerate_id() gleich nach session_start()
> einbaut, auch wenn es verlockend ist. Es empfiehlt sich, dafuer eine
> Zeitschaltuhr einzuprogrammieren.

session_regenerate_id() kennt einen optionalen Parameter. Verwendet man
session_regenerate_id(true) wird die alte Datei entfernt.

Es empfiehlt sich aber häufig, ein eigenes Sessionsystem zu haben, dass
- wie in einem anderen Beitrag vorgeschlagen - zusätzliche Informationen
abzufragt und deren Stringenz überprüft.

Gruß,
Torsten
thorny [ Fr, 03 August 2007 09:11 ] [ ID #1786373 ]

Re: Sessions absichern

Oliver Benning schrieb:
> Hallo,
>
> wie kann ich Session vor Diebstahl schützen, also wenn jemand einen Link
> aus Versehen irgendwo mit SessionID postet und ein anderer diesen Link
> öffnet. Ich habe etwas von Secure-Cookies gelesen, aber ich möchte, daß
> die Sessions auch ohne Cookies funktionieren.

Z.B. In dem du gar keine Session IDs in der URL mitlieferst.
Dann muss zwar der Browser cookies unterstützen aber sowas sollte dann
schon drin sein, um deine Funktionalität zu nutzen.


Wenn Sicherheit wichtig ist, solltest du keine Sessions zum absichern
nutzen, sondern das über HTTP_AUTH regeln.

>
> Wie stelle ich also sicher, daß nur die Person Zugriff auf die Session
> hat, die sie eröffnet hat? Abfrage von Browser Version etc. ist ja nicht
> mehr wirklich ausreichend.
>
> Gruß,
> Oliver
Stefan Braumeister [ Fr, 03 August 2007 12:02 ] [ ID #1786379 ]

Re: Sessions absichern

* Oliver Benning wrote:

> wie kann ich Session vor Diebstahl schützen, also wenn jemand einen Link
> aus Versehen irgendwo mit SessionID postet und ein anderer diesen Link
> öffnet. Ich habe etwas von Secure-Cookies gelesen, aber ich möchte, daß
> die Sessions auch ohne Cookies funktionieren.
>
> Wie stelle ich also sicher, daß nur die Person Zugriff auf die Session
> hat, die sie eröffnet hat? Abfrage von Browser Version etc. ist ja nicht
> mehr wirklich ausreichend.

Für sicherheitskritische Situation lege ich beim Benutzer einen Cookie
ab, der in kryptierter Form session_id, Benutzername, Browserkennung,
IP, letzte Zugriffszeit und Browserkennung ablegt.
Das liegt serverseitig dann auch in einer Session-Tabelle. Nur wenn das
alles stimmt, ist der Benutzer weiter eingeloggt. Andernfalls lösche ich
den Eintrag aus der Sessions-Tabelle.

Gérôme

--
BM Computer-Services, Bergmannstr. 66, 10961 Berlin
Webdesign, Internet, Layout und Grafik
Tel.: 030/20649400, mobil 0175/7419517, Fax: 030/20649401
Web: http://www.bmservices.de, eMail: kontakt [at] bmservices.de
Bernd Muent [ Fr, 03 August 2007 14:47 ] [ ID #1786385 ]

Re: Sessions absichern

>>
>> Wie stelle ich also sicher, daß nur die Person Zugriff auf die Session
>> hat, die sie eröffnet hat? Abfrage von Browser Version etc. ist ja
>> nicht mehr wirklich ausreichend.
>
> Für sicherheitskritische Situation lege ich beim Benutzer einen Cookie
> ab, der in kryptierter Form session_id, Benutzername, Browserkennung,
> IP, letzte Zugriffszeit und Browserkennung ablegt.

IP und Browserkennung sind aber nicht besonders eindeutig:-)

Denn wenn du mal überlegst,wieviele die gleiche Browserkennung haben und
wieviele die gleiche IP haben weil sie über einen Proxy surfen, dann
halte ich das aber nicht für besonders sicher und da ja oftmals
Browserlücken zum Vorschein kommen die Cookie stealing erlauben, halte
ich das nicht für besonders sicher.

Gruß Stefan
Stefan Braumeister [ Fr, 03 August 2007 15:52 ] [ ID #1786387 ]

Re: Sessions absichern

Bernd Muent wrote:

Hallo,

> Für sicherheitskritische Situation lege ich beim Benutzer einen Coo=
kie
> ab, der in kryptierter Form session_id, Benutzername, Browserkennung,=

> IP,

BTW IP.

29.15. Warum verwendet PHP nicht die IP-Nummer des Browsers als Schutz=

gegen eine =DCbernahme der Session?
http://www.php-faq.de/q/q-sessions-ip.html


Browserkennung ist IMHO ganz nützlich. Die sollte sich in der Regel
nicht ändern und zumindest ein wenig was abfangen.

session_regenerate_id() ist ebenfalls nützlich. Hat IMHO aber den
Nachteil, dass sie es ermöglicht den eigentlichen Besitzer der Sessi=
on
die Session zu entziehen, weil immer nur die zuletzt gesendete ID
gültig ist. Ich wüßte aber nicht so recht wie sich das für ein=
en
Angriff nutzen ließe. Bei einer Man in the Middle Attack hätte der=

Angreifer ja zusätzlich das Login-Passwort, da ist die SessionID
dann noch das geringste Problem.

Nur auch die Kombination von User-Agent plus session_regenerate_id()
senkt lediglich die Wahrscheinlich für einen Mißbrauch der Session=
ID,
unmöglich wird er dadurch nicht.

Eine kurze Lebenszeit für eine Session senkt die Wahrscheinlichkeit
ebenfalls.


Für Logins in Adminbereiche sollte man IMHO verschlüsselte Verbind=
ungen
und HTTP Authentication bevorzugen, wobei HTTP Authentication leider
kein echtes Logout kennt und https:// durch das Verzichten aufs
Caching im Browser nervig sein kann.


tschuess
[|8:)
Sven Drieling [ Fr, 03 August 2007 17:05 ] [ ID #1786388 ]

Re: Sessions absichern

Stefan Braumeister wrote:

Hallo,

> Denn wenn du mal überlegst,wieviele die gleiche Browserkennung habe=
n und
> wieviele die gleiche IP haben weil sie über einen Proxy surfen, dan=
n
> halte ich das aber nicht für besonders sicher und da ja oftmals
> Browserlücken zum Vorschein kommen die Cookie stealing erlauben, ha=
lte
> ich das nicht für besonders sicher.

Browserkennung und IP brauchen auch nicht im Cookie gespeichert
zu werden, die schickt der Web-Browser ja von selbst mit und
müssen nur zum Vergleich auf dem Server in der Session gespeichert
werden.


tschuess
[|8:) http://www.sven-drieling.de/
Sven Drieling [ Fr, 03 August 2007 17:13 ] [ ID #1786389 ]
PHP » de.comp.lang.php.misc » Sessions absichern

Vorheriges Thema: SOAP serverseitige Validierung gegen WSDL
Nächstes Thema: Session endet nach Zeit "X" - wieso?