Wie wird mit $_GET http://tinyurl.com/5kxh ausgelesen?
Dieter
- php
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!
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
Hi Cheatah
Danke für deine Antwort. Stimmt, könnte man mit $_SERVER['QUERY_STRING']; lösen! Danke für deine Hilfe!
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
Hi,
Stimmt natürlich, sonst müsste ja noch mindestens ein ? (http://tinyurl.com/?5kxh) drin stehen!
Danke für den Hinweis.
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
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
Hi,
kannst Du das erläutern oder Links posten.
Ich sehe in Deiner Beschreibung noch kein Sicherheitsrisiko.
MfG
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
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
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
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
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
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
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
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
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!
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
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!