Entführung von PHP-Sitzungen

Lesezeit: 7 Minuten

Entfuhrung von PHP Sitzungen
James

Ich habe eine Frage zum Session-Hijacking in PHP. Ich habe heute Morgen darüber gelesen und habe ein paar Fragen, die in der Dokumentation, die ich gelesen habe, einfach nicht klar beantwortet wurden.

Kann ein Benutzer seine Sitzung auf meiner Website ändern? dh wenn sie beim Login eine Sitzung von X haben, können sie diese Sitzung auf Y oder Z ändern, wenn sie dies wünschen?

Ich dachte, dass Sitzungen vom Browser festgelegt wurden und nicht geändert werden konnten, aber all diese Sitzungs-Hijacking-Sachen, die ich gelesen habe, haben einige Zweifel in mir geweckt.

1645907049 752 Entfuhrung von PHP Sitzungen
Lekenstein

Der Begriff “Session” ist überladen, um auf dem Server und im Browser unterschiedliche Bedeutungen zu haben. Browsersitzungen sind bestenfalls schwach mit Serversitzungen verbunden. “Session Hijacking” bezieht sich auf Server Sitzungen.

Serverseitig hat eine Sitzung eine ID (die zwischen Client und Server weitergegeben wird), Inhalt (auf dem Server gespeichert) und möglicherweise andere Eigenschaften, wie z. B. die letzte Zugriffszeit. Die Session-ID wird in der Regel als Cookie übergeben. In PHP ist der Standardname für das Cookie „PHPSESSID“. Wenn keine Cookies verfügbar sind, verwendet PHP (optional) einen gleichnamigen Abfragezeichenfolgenparameter (“PHPSESSID”). Dieses Cookie (oder Abfrageparameter) kann leicht geändert werden und daher kann auch die Sitzungskennung geändert werden.

Die Inhalt einer Session (also den Anmeldestatus eines Benutzers enthalten) vom Client nicht geändert werden können, werden die Daten auf dem Server gespeichert und können nur durch ein PHP-Skript auf diesem Server geändert werden. Beachten Sie, dass in einer Shared-Hosting-Umgebung (gemeinsam von anderen Diensten oder Benutzern) die Sitzungen überschrieben werden können, wenn das standardmäßige Sitzungsspeicherverzeichnis verwendet wird (/tmp). Um sich davor zu schützen, verwenden Sie entweder eine Datenbank durch session_set_save_handler() oder legen Sie mithilfe von ein benutzerdefiniertes Sitzungsverzeichnis fest session.save_path mit den richtigen Verzeichnisberechtigungen (vorzugsweise 700, was bedeutet, dass nur der Eigentümer (der PHP-Benutzer) darauf lesen und schreiben kann).

Um sich vor Session-Hijacking zu schützen, müssen Sie andere Möglichkeiten haben, den Benutzer für eine Sitzung zu identifizieren. Dies kann ein User-Agent, eine IP-Adresse oder ein anderes Cookie sein. Die zuvor genannten Methoden sind nur Problemumgehungen. Der beste Weg, sich vor dem Diebstahl des Sitzungscookies zu schützen, ist die Verwendung von HTTPS, wenn eine Sitzung beteiligt ist. Vergessen Sie nicht, die einzustellen httponly Flagge zu true verwenden session_set_cookie_params()

Clientseitig wird „Session“ wieder überladen und in verschiedenen Kontexten verwendet (z. B. Session-Manager, die beim Öffnen eines Browsers geöffnete Seiten wiederherstellen, Session-Cookies u sessionStorage). Wir können versuchen, diese Bedeutungen zu kombinieren (was keineswegs eine Standardbedeutung ist), indem wir sagen, dass eine Browsersitzung aus einer Sammlung von Ansichten und den damit verbundenen Daten besteht. (Mit “Ansicht” meine ich ungefähr Registerkarten in Browsern mit Registerkarten und Fenster in Browsern ohne Registerkarten; die DOM window Objekt macht eine Ansicht für JS verfügbar.) Jede Ansicht hat einen Verlauf, eine aktuelle Seite und Seitendaten. Seitendaten für Seiten in derselben Domäne werden zwischen Ansichten in einer Sitzung geteilt; Wenn sich zwei Seiten in unterschiedlichen Domänen oder Sitzungen befinden, teilen sie keine Daten. Das Beenden des Browsers schließt alle geöffneten Sitzungen und speichert möglicherweise einen Teil der Sitzung(en) (z. B. Verlauf, aktuelle Seiten, sessionStorage), damit ein Sitzungsmanager sie erneut öffnen kann. Sitzungscookies sind Cookies, die verworfen werden, wenn eine Sitzung geschlossen wird; Mit anderen Worten, Session-Cookies sind nicht dauerhaft. Obwohl ein Sitzungscookie eine Sitzungs-ID enthalten kann, sind die beiden Konzepte senkrecht (Sinn 4; Sitzungscookies können andere Dinge als Sitzungs-IDs enthalten, und Sitzungs-IDs können in dauerhaften Cookies gespeichert werden).

Ob sich zwei unterschiedliche Ansichten in derselben Sammlung befinden, hängt vom Browser ab. Beispielsweise kann ein Browser davon ausgehen, dass eine Sitzung aus allen Registerkarten in einem einzigen Fenster besteht; separate Fenster sind separate Sitzungen. IE8 ermöglicht es Benutzern, neue Sitzungen über den Menüpunkt “Neue Sitzung” zu erstellen. Andernfalls werden in derselben Sitzung neue Fenster und Registerkarten geöffnet. Datenschutzmodi erstellen auch neue Sitzungen.

Zusammenfassend lässt sich sagen, dass Browsersitzungen tatsächlich vom Browser festgelegt werden, obwohl er Benutzern verschiedene Möglichkeiten zur Steuerung von Browsersitzungen bietet: Erstellen neuer Sitzungen, Ändern des Verlaufs und der aktuellen Seite in einer Ansicht durch Durchsuchen, Speichern und Wiederherstellen von Sitzungen. Ein Benutzer könnte sogar Sitzungsdaten ändern, indem er auf der Festplatte gespeicherte Sitzungen bearbeitet, obwohl dies keine Funktion des Browsers ist. All das hat nichts mit Session-Hijacking zu tun. Serversitzungen werden vom Server erstellt und verwaltet, aber Benutzer können Serversitzungen wechseln (versuchen), indem sie die Sitzungs-ID ändern, die ihr Browser an den Server zurückgibt, was die Grundlage für Sitzungs-Hijacking ist.

Siehe auch PHP-Sitzungsfixierung / Hijacking.

  • Session-Hijacking bezieht sich auf den Diebstahl des Session-Cookies. Dies kann am einfachsten erreicht werden, wenn Sie ein lokales Netzwerk mit anderen Computern teilen. Zum Beispiel bei Starbucks. Beispiel… ein Benutzer mit Sitzung Y durchsucht die Website von James bei Starbucks. Ich höre ihren Netzwerkverkehr ab und nippe an meinem Latte. Ich nehme die Cookies des Benutzers mit Sitzung Y für die Website von James und stelle meinen Browser so ein, dass er sie verwendet. Wenn ich jetzt auf die Website von James zugreife, denkt die Website von James, dass ich der Benutzer mit Sitzung Y bin. Die einzige Möglichkeit, dies zu stoppen, besteht darin, End-to-End-https zu verwenden.

    – Chris

    26. Juni 2011 um 9:27 Uhr

  • Ich denke, deshalb hat Lekensteyn die Funktion session_set_cookie_params erwähnt, mit der Sie angeben können, dass kein Sitzungscookie verwendet wird, wenn die Verbindung nicht über https erfolgt.

    – Arch

    26. Juni 2011 um 9:37 Uhr

  • @Arkh: Eigentlich habe ich eine Bearbeitung vorgenommen, nachdem Chris es erwähnt hat. Wenn es Spyware dennoch gelingt, die Sitzungs-ID zu kopieren, sollten Sie die anderen genannten Ideen ein wenig schützen. Natürlich ist es keine kugelsichere Methode, aber immer noch besser als nichts, und wenn Sie infiziert sind, haben Sie mehr Sorgen als eine PHP-Sitzung. (es sei denn, eine Banking-Website wird mit dieser Sitzung betrieben 😉 )

    – Lekenstein

    26. Juni 2011 um 9:44 Uhr


  • Was genau ändert sich bei der Verwendung einer SSL-gesicherten Verbindung? Sind Sitzungen dann gespeichert?

    – Chris

    30. September 2012 um 11:52 Uhr

  • @binoculars Ja, das tut es, insbesondere wenn keine anderen Mechanismen vorhanden sind, um die Sitzung zu validieren. Beispiel: stackoverflow.com identifiziert Sie mit dem usr Cookie, das die Form hat t=XXX&s=yyy. Ein Benutzer mit hohen Wiederholungszahlen kann beispielsweise auf Moderationstools zugreifen (was Ihr “eingeschränkter Bereich” wäre). Wenn es jemandem gelungen ist, den unverschlüsselten HTTP-Verkehr abzugreifen, wird dieses Sitzungscookie trivialerweise extrahiert. Da diese ID nicht an eine IP-Adresse gebunden ist, kann der Angreifer dieses Cookie verwenden, um Zugriff auf das Konto des High-Rep-Benutzers zu erhalten. (Ich habe das gerade versucht mit `curl -b ‘usr=t=…’ stackoverflow.com)

    – Lekenstein

    7. Dezember 2013 um 14:31 Uhr


Ein Benutzer kann seine Sitzung jederzeit ändern. Es ist nur eine zufällige Zeichenfolge, die in einem Cookie im Browser des Benutzers gespeichert wird, und daher ist es für den Benutzer sehr einfach, sie zu ändern.

Da der eigentliche Inhalt der Sitzung auf Ihrem Server gespeichert wird, könnten Sie beispielsweise die IP-Adresse, den Benutzeragenten oder ähnliches des Benutzers speichern, um es schwieriger zu machen, Sitzungen voneinander zu stehlen, indem Sie überprüfen, ob diese Informationen bei jedem neuen http immer noch übereinstimmen Anfrage gestellt wird.

Kein tatsächlicher Benutzer kann den tatsächlichen Sitzungswert auf Ihrer Website ändern, aber er kann die Sitzungs-ID ändern, die verwendet wird, um die Sitzung zu verfolgen. Diese Sitzungs-ID wird im Client-Browser von Ihrer Website normalerweise mit dem Namen “PHPSESSID” in Cookies gespeichert, die auch als Sitzung bezeichnet werden Plätzchen. Wenn eine Sitzung auf einer Website gestartet wird, speichert sie die eindeutige ID, die dieser Sitzung entspricht, im jeweiligen Client-Browser in Form eines Cookies mit dem Namen “PHPSESSID”. Wenn der Benutzer also in der Lage ist, die PHPSESSID eines anderen Benutzers zu erhalten, und diese seine PHPSESSID durch die PHPSESSID des Opfers ersetzen kann, führt dies zu einer Sitzungsübernahme. Ich verwende hier den PHP-Kontext.

867860cookie-checkEntführung von PHP-Sitzungen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy