HP-Bauer: PHPSESSID und Sicherheitsproblem

Hallo,

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?

MfG
HP-Bauer

  1. Hi,

    die Variable zuvor auf Plausibilität prüfen, dass genau das nicht passieren kann!

    gruß

    1. Hi,

      die Variable zuvor auf Plausibilität prüfen, dass genau das nicht passieren kann!

      Welche? Die PHPSESSID wird ja fallweise von PHP der URL automatisch hinzugefügt....stehe aufm Schlauch

      MfG
      HP-Bauer

      1. Welche? Die PHPSESSID wird ja fallweise von PHP der URL automatisch hinzugefügt....stehe aufm Schlauch

        Ja bei dir schon.

        Und wenn ich dich richtig verstanden habe, möchtest du verhindern, dass auf der Folgeseite durch die get-Variable etwas böses eingeschleust wird, also musst du auf der Folgeseite, bevor du die PHPSESSID aus der URL weiterverwendest auf Plausibilität prüfen.

        Oder reden wir aneinander vorbei?

        grieß

        1. Und wenn ich dich richtig verstanden habe, möchtest du verhindern, dass auf der Folgeseite durch die get-Variable etwas böses eingeschleust wird, also musst du auf der Folgeseite, bevor du die PHPSESSID aus der URL weiterverwendest auf Plausibilität prüfen.

          Oder reden wir aneinander vorbei?

          Aber wie prüfe ich die PHPSESSID? Die darf nur eine Session-Id vom eigenen Server beinhalten.

          MfG
          HP-Bauer

        2. der könnte die seite aber auch so konzipieren , dass eincshleusen kein sinn ergibt.
          ist gar nicht so schwer, simple switch() reichen.
          MFG
          bleicher

          --
          __________________________-
          Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
          1. der könnte die seite aber auch so konzipieren , dass eincshleusen kein sinn ergibt.
            ist gar nicht so schwer, simple switch() reichen.
            MFG
            bleicher

            Wie das?

            MfG
            HP-Bauer

  2. Hi,

    daran hab ich noch garnicht gedacht, dass Cookies auch deaktiviert sei können.

    Was soll ich dann machen? So wie HP-Bauer? Oder hat so ein User einfach pech gehabt?

    grüßchen

  3. echo $begrüßung;

    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?

    Da mir eine solche Sicherheitslücke nicht bekannt ist, hätte ich gern nähere Informationen dazu. Ist diese Möglichkeit der Code-Injection irgendwo beschrieben?

    echo "$verabschiedung $name";

  4. 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."
    1. echo $begrüßung;

      PHP prüft übrigens selbst, ob der Wert für die Session-ID gewissen Formalien genügt. [...]
      "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.

      Dies macht es aber nur, wenn der standardmäßige Session-Save-Handler verwendet wird. Ebenfalls fraglich ist, ob beim Öffnen der Datei mit dem aus der Session-ID gebildeten Dateinamen der Protokoll-Wrapper-Mechanismus angewendet wird. (Es gelang mir nicht, aus dem PHP-Code zu entnehmen, über welchen Weg die Datei geöffnet wird. Oben erwähnte Prüfung fand ich allerdings (Zeile 67ff.).) Benutzt man einen selbst geschriebenen Session-Save-Handler, sehe ich schon die Möglichkeit mittels der übergebenen Session-ID und fopen() und aktiviertem allow_url_fopen einen HTTP-Request auslösen zu können. Diese Lücke wäre aber nicht primär PHP in die Schuhe zu schieben.

      echo "$verabschiedung $name";