Frage zu SESSION und Sicherheit

Hi bplaced-Kollegen,

ich hab ein paar Fragen: Ich habe ein Community-System geschrieben bei dem man auch Nachrichten (PM) an andere Nutzer schicken kann. Dazu ist natürlich ein Login usw. erforderlich. Bei dem Login wird eine session_id erstellt.

session_start(); // Das steht auf jeder meiner Seiten
$_SESSION["session_id"] = $session_id; // Hier wird die session_id zugewiesen

Diese wird dannach in eine Tabelle in der Datenbank zusammen mit der IP-Adresse des Nutzers eingetragen. Jetzt habe ich aber ab und zu Probleme mit der Session, wenn Nutzer eine PM schreiben wollen wird bei mir über JS ein PopUp geöffnet wo dann das Formular für die Eingabe ist… blablabla… wenn die Nutzer dann aber die Nachricht abschicken, bekommen sie des öfteren die Fehlerseite mit der Meldung das sie nicht angemeldet seien zu sehen… Das muss ja iwie an der Session liegen? Wird die nicht übergeben?
Jetzt hab ich mir gedacht, das ich die Session einfach an die URL anhänge? Birgt das Sicherheitsrisiken? Und wie kann ich ein Timeout der Session setzen? Das wenn man zum Beispiel sich angemeldet hat und seinen PC in den Ruhezustand schaltet und dann 24 Stunden später wieder anmacht nicht noch immer auf der Seite angemeldet ist?

[code]$_SESSION[‘zeit’] = time();

// Überprüfung:

$diff = time() - $_SESSION[‘zeit’];
if($diff > 1200)
{
header(“Location: login.php”);
}[/code]
Das sollte dir helfen!

Für die Sessions kann man noch zusätzlich die Lebensdauer der Cookies setzen:
de3.php.net/manual/de/function.s … params.php

ansonsten, wenn du zusammen mit der IP und so, jedesmal das Datum speicherst, wenn ein Nutzer eine Aktion ausführt, dann hast du ja etwas wodran du die Zeit messen kannst.

Oder zum Beispiel daran, dass ihre IP gewechselt hat …
Reconnect des Routers, (automatischer) Wechsel des Proxies (wird bei manchen durch den Provider vorgenommen), etc. - kann viele Gründe dafür geben; und deshalb ist es nicht sonderlich sinnvoll, die IP als “Erkennungskriterium” hinzuzunehmen. (Wenn ein Nutzer an einer IP “erkennebar” wäre, dann bräuchte man ja keine Session-ID mehr.)

Das macht PHP bei Defaulteinstellungen automatisch für dich, um den Fall abzufangen, dass die Übergabe per Cookie nicht funktioniert.

Session-“Klau” wird damit einfacher.
Wenn der Nutzer bspw. einen Link mit Session-ID weitergibt, kann jemand anders darüber seine Session nutzen. Und auch wenn externe Ressourcen eingebunden sind (Bilder, …), besteht eine grosse Wahrscheinlichkeit, dass die Seitenadresse inkl. Session-ID per Referrer an fremde Server übermittelt wird - wenn da jemand diesen zeitnah auswertet, kann er ebenfalls die Session klauen.

Das “beendet” eine Session aber nicht, sondern setzt eben nur die Lebensdauer des Cookies.

Und auch bspw. session.gc_maxlifetime ist keine Maximal-, sondern eine Minimallebensdauer der Session, auch wenn der Name der Einstellung anderes suggeriert.

PHP macht das automatisch? Wie soll das funktionieren?
Durchsucht PHP etwa die gesamte Ausgabe nach potentiellen Links und hängt dort die Session-ID an die URL bevor es an den Browser gesendet wird?
Afaik muss man das noch manuell machen.

Deshalb sagte ich ja auch “zusätzlich”.

mfg Balmung

Aber ich muss die Abfrage mit der Zeit dann vor der Aktualisierung der letzten Aktion durchführen? Sonst isses ja wieder gültig?

Logischerweise ja.

Danke xD das hat mich total fertig gemacht :slight_smile:

[quote=“Balmung”]PHP macht das automatisch? Wie soll das funktionieren?
Durchsucht PHP etwa die gesamte Ausgabe nach potentiellen Links und hängt dort die Session-ID an die URL bevor es an den Browser gesendet wird?[/quote]
Wenn session.use_trans_sid aktiviert ist (ich sehe gerade, dass ist es inzwischen nicht mehr per Default), dann macht PHP genau das, ja.
url_rewriter.tags konfiguriert, in welchen HTML-Elementen die SID eingefuegt wird.

Das macht PHP beim ersten Start einer Session, und versucht gleichzeitig ein Cookie zu setzen (wenn Übergabe per Cookies aktiviert ist). Kommt dann beim nächsten Request ein Cookie mit, wird nur noch die Übergabe per Cookie benutzt, das Schreiben der SID in bestimmte HTML-Elemente findet dann nicht mehr statt - und wenn kein Cookie, dann fährt PHP damit einfach fort.

Wenn’s nicht aktiviert ist, ja. Wie gesagt, inzwischen wohl kein Default mehr.
Kann man ja aber selber aktivieren, wenn man diesen Fallback haben, und sich aber nicht selber darum kümmern müssen will.

hm okay, das hab ich in der tat nicht gewusst.

Danke =) ihr wart mir wie immer mal wieder eine große Hilfe :slight_smile: