Dieter: Wie wird mit $_GET http://tinyurl.com/5kxh ausgelesen?

Hallo Selfhtml Forum,

Ich wundere mich schon lange wie die Variable einer URL wie http://tinyurl.com/5kxh ausgelesen wird? Ich dachte immer, dass es dazu auch noch einen weiteren Wert braucht. Sowas in der Richtung http://tinyurl.com/var=5kxh.

Wird dies auch mit $_GET bewerkstelligt?

Grüsse!

  1. Hi,

    Ich wundere mich schon lange wie die Variable einer URL wie http://tinyurl.com/5kxh ausgelesen wird?

    die beim Server aufgerufene URL steht dem Server durchaus zur Verfügung.

    Wird dies auch mit $_GET bewerkstelligt?

    Nein. *FALLS* PHP im Spiel sein *SOLLTE*, wäre $_SERVER der Datenspeicher der Wahl.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi Cheatah
      Danke für deine Antwort. Stimmt, könnte man mit $_SERVER['QUERY_STRING']; lösen! Danke für deine Hilfe!

      1. Hi,

        Danke für deine Antwort. Stimmt, könnte man mit $_SERVER['QUERY_STRING']; lösen! Danke für deine Hilfe!

        Nein, da bei http://tinyurl.com/5kxh kein Query String vorhanden ist.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
        1. Hi,

          Stimmt natürlich, sonst müsste ja noch mindestens ein ? (http://tinyurl.com/?5kxh) drin stehen!

          Danke für den Hinweis.

  2. Hello,

    Ich wundere mich schon lange wie die Variable einer URL wie http://tinyurl.com/5kxh ausgelesen wird? Ich dachte immer, dass es dazu auch noch einen weiteren Wert braucht. Sowas in der Richtung http://tinyurl.com/var=5kxh.

    Wird dies auch mit $_GET bewerkstelligt?

    Das Arbeiten mit derartigen Werten und Ermitteln dieses Wertes ist nur möglich, wenn der Webserver entsprechend konfiguriert ist. Es handelt sich dabei um die "Path-Info".

    Abfragen kannst Du sie bei PHP über die Variable $_SERVER['PATH_INFO'], in der dann der gesamte Restpfad nach dem gefundenen passenden Scriptnamen, aber ohne die URL-Parameter (hinter dem '?'), drinsteht.

    Das ist z.B. beim Apache möglich, wenn die Konfigurationsvariable AcceptPathInfo auf On steht.

    http://httpd.apache.org/docs/2.0/mod/core.html#acceptpathinfo
    http://httpd.apache.org/docs/2.2/mod/core.html#acceptpathinfo

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hello,

      noch eine Ergänzung zur Sicherheit:

      Aufgrund dieses Features des Apache-Servers (oder auch vieler anderer Webserver) ist die Variable $_SERVER['PHP_SELF'] ein Angriffsziel für XSS-Angriffe (Cross Site Scripting). Setzt man diese unbehandelt als Actiopn-Attribut eines Formulares ein, lässt sich das Formular "entführen", indem der Bösewicht die Seite über einen entsprend manipulierten Link anbietet.

      Man bekommt dann zwar die Originalseite vom Originalserver angezeigt, der Request mit dem (ausgefüllten) Formular landet dann aber auf dem vom Angreifer bestimmten Server.

      Daher muss diese Variable also vor Benutzung behandelt werden!

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hi,

        kannst Du das erläutern oder Links posten.
        Ich sehe in Deiner Beschreibung noch kein Sicherheitsrisiko.

        MfG

        • Steffen
        1. Hi,

          Ich sehe in Deiner Beschreibung noch kein Sicherheitsrisiko.

          Du baust X in ein HTML-Dokument ein, und X enthält einen Wert, den der Client zum überwiegenden Teil selbst bestimmen kann.

          Dass das ein Sicherheitsrisiko ist, wenn du das einbauen unbehandelt vornimmst, sollte absolut offensichtlich sein.
          Schliesslich gilt die Maxime "never trust incoming data" überall.

          MfG ChrisB

          --
          Light travels faster than sound - that's why most people appear bright until you hear them speak.
          1. Hi,

            ich glaube wir haben uns falsch verstanden.

            Zitat von Tom:
            8<--
            Aufgrund dieses Features des Apache-Servers (oder auch vieler anderer Webserver) ist die Variable $_SERVER['PHP_SELF'] ein Angriffsziel für XSS-Angriffe (Cross Site Scripting). Setzt man diese unbehandelt als Actiopn-Attribut eines Formulares ein, lässt sich das Formular "entführen", indem der Bösewicht die Seite über einen entsprend manipulierten Link anbietet.
            8<--

            Darauf hat sich meine Frage bezogen und $_SERVER['PHP_SELF'] ist keine "incoming data"?!
            Deswegen verstehe ich Toms Sicherheitsrisiko nicht.

            MfG

            • Steffen
            1. Hallo Steffen,

              Darauf hat sich meine Frage bezogen und $_SERVER['PHP_SELF'] ist keine "incoming data"?!
              Deswegen verstehe ich Toms Sicherheitsrisiko nicht.

              hier zwei Links, um die Du gebeten hast:

              http://seancoates.com/xss-woes
              http://blog.oncode.info/2008/05/07/php_self-ist-boese-potentielles-cross-site-scripting-xss/

              Vielleicht siehst Du jetzt die Problematik.

              Freundliche Grüße

              Vinzenz

              1. Danke!!! :-)

                Alles klar.

                8<--
                <form action="/tests/simple.php/"><script>alert('xss')</script><foo">
                8<--

                Damit hat sich der Knoten gelöst.
                Ich hatte eher an sowar wie folgt gedacht und bin nicht draufgekommen.

                8<--
                <form action=/my/script.php/http://blablabla.bla/...
                8<--

                Danke nochmal.

                MfG

                • Steffen
                1. Hello,

                  Danke!!! :-)

                  Bitte. Hatte heute Nachmittag etweas anderes zu tun. SOchnst hätte ich Dir auch geantwortet...

                  8<--
                  <form action="/tests/simple.php/"><script>alert('xss')</script><foo">
                  8<--

                  Das geht auch gänzlich ohne JavaScript.
                  Man kann mittels ['PHP_SELF'] den String dermaßen erweitern, dass das Action-Attribut auf ein anderes Request-Ziel zeigt. Das ist dann die Entführung...

                  Liebe Grüße aus dem schönen Oberharz

                  Tom vom Berg

                  --
                  Nur selber lernen macht schlau
                  http://bergpost.annerschbarrich.de
                  1. Moin!

                    8<--
                    <form action="/tests/simple.php/"><script>alert('xss')</script><foo">
                    8<--

                    Dagegen hilft htmlspecialchars(). Aber...

                    Das geht auch gänzlich ohne JavaScript.
                    Man kann mittels ['PHP_SELF'] den String dermaßen erweitern, dass das Action-Attribut auf ein anderes Request-Ziel zeigt. Das ist dann die Entführung...

                    Demo hier:

                    http://www.thespanner.co.uk/2009/09/25/php-self-return-of-the-slash/

                    - Sven Rautenberg

            2. Darauf hat sich meine Frage bezogen und $_SERVER['PHP_SELF'] ist keine "incoming data"?!
              Deswegen verstehe ich Toms Sicherheitsrisiko nicht.

              Ich hab nochmal nachgelesen und musste feststellen, dass ja $_SERVER['PHP_SELF'] doch "incoming data" ist. :-( Ich dachte an SCRIPT_NAME.

              MfG

              • Steffen
    2. Hi,

      Das Arbeiten mit derartigen Werten und Ermitteln dieses Wertes ist nur möglich, wenn der Webserver entsprechend konfiguriert ist. Es handelt sich dabei um die "Path-Info".

      Abfragen kannst Du sie bei PHP über die Variable $_SERVER['PATH_INFO'], in der dann der gesamte Restpfad nach dem gefundenen passenden Scriptnamen, aber ohne die URL-Parameter (hinter dem '?'), drinsteht.

      Wenn es einen "passenden Scriptnamen" gibt - das düfte bei http://example.com/5kxh aber vermutlich nicht der Fall sein.

      Wenn du mit PATH_INFO arbeiten willst, dann muss sich erst mal irgendwas "mehr" als nur / im Pfad befinden, das der Webserver als auszuführendes Script identifizieren kann.

      MfG ChrisB

      --
      Light travels faster than sound - that's why most people appear bright until you hear them speak.
      1. Hi!

        Das Arbeiten mit derartigen Werten und Ermitteln dieses Wertes ist nur möglich, wenn der Webserver entsprechend konfiguriert ist. Es handelt sich dabei um die "Path-Info".

        Das kann man so nicht sagen. Zunächst einmal ist es eine URL. Ob und was davon dann PathInfo wird, hängt von der Konfiguration des Webservers ab. Ansonsten kann 5kxh durchaus auch ein vorhandenes Dokument sein, dann gibt es kein PathInfo.

        Abfragen kannst Du sie bei PHP über die Variable $_SERVER['PATH_INFO'], in der dann der gesamte Restpfad nach dem gefundenen passenden Scriptnamen, aber ohne die URL-Parameter (hinter dem '?'), drinsteht.
        Wenn es einen "passenden Scriptnamen" gibt - das düfte bei http://example.com/5kxh aber vermutlich nicht der Fall sein.
        Wenn du mit PATH_INFO arbeiten willst, dann muss sich erst mal irgendwas "mehr" als nur / im Pfad befinden, das der Webserver als auszuführendes Script identifizieren kann.

        Jein. Man kann ja den Request mit mod_rewrite derart zu einem Dokument umschreiben, dass der gesamte Path-Teil als PathInfo zur Verfügung steht.

        Lo!

        1. Hi,

          Jein. Man kann ja den Request mit mod_rewrite derart zu einem Dokument umschreiben, dass der gesamte Path-Teil als PathInfo zur Verfügung steht.

          Natürlich kannst du mod_rewrite hinzunehmen - dann brauchst du auch nicht mehr die Umgebungsvariable PATH_INFO, sondern kannst dir alles interessante auch in GET-Parametern zur Verfügung stellen lassen.

          Ich bezog mich *nur* auf PATH_INFO, wenn man auf mod_rewrite verzichten will oder es nicht zur Verfügung hat.

          http://example.com/x/pathinfo "geht", wenn der Server für x eine passende Datei findet, die er dem Request zuordnen kann.

          http://example.com/pathinfo hingegen geht nicht, sondern liefert einen 404, wenn nicht zufällig pathinfo der Name einer Datei oder eines Verzeichnisses ist.

          (Neben mod_rewrite schliesst diese Betrachtung des "simpelsten" Falles auch Aliase etc. aus. Ich beziehe mich auf die reine Übersetzung eines Request auf physisch vorhandene Dateien und Verzeichnisse im Document Root.)

          MfG ChrisB

          --
          Light travels faster than sound - that's why most people appear bright until you hear them speak.
          1. Hi!

            Jein. Man kann ja den Request mit mod_rewrite derart zu einem Dokument umschreiben, dass der gesamte Path-Teil als PathInfo zur Verfügung steht.
            Natürlich kannst du mod_rewrite hinzunehmen - dann brauchst du auch nicht mehr die Umgebungsvariable PATH_INFO, sondern kannst dir alles interessante auch in GET-Parametern zur Verfügung stellen lassen.

            Kann man, muss man aber nicht. Dann hat man die GET-Parameter komplett frei für eine anderweitige Verfügung. Eigentlich braucht man PATH_INFO in dem Fall gar nicht, weil die Information bereits in REQUEST_URI steht (wenn man den Querystring entfernt).

            Ich bezog mich *nur* auf PATH_INFO, wenn man auf mod_rewrite verzichten will oder es nicht zur Verfügung hat.

            Das war mir schon klar, aber diese Beschränkung muss man sich ja ohne Grund nicht selbst auferlegen.

            Lo!