6.5. Superglobale Variablen

Superglobale Variablen wie z.B. $_GET, $_POST, $_REQUEST, $_COOKIE und $_SERVER sollten immer als unsicher behandelt werden, da Sie nie genau wissen können, was in ihnen definiert wurde. Gerade die $_SERVER Variable enthält nicht immer nur Daten über den eigentlichen Server sondern auch die übertragenen Daten des Browsers eines Benutzers.

HTTP_REFERER

Unsicher ist deshalb z.B. folgendes:

<?php
echo 'Hey Du! Du kamst gerade von der Seite ' . $_SERVER['HTTP_REFERER'];
?>

Solche Anfrage-Header können sehr einfach und über die Installation einer Browser-Erweiterung (wie Firebug) gefälscht werden.

Sicherer ist deshalb:

<?php
echo 'Hey Du! Du kamst gerade von der Seite ' . esc_url( $_SERVER['HTTP_REFERER'] );
?>

HTTP_USER_AGENT

Trauen Sie nie der $_SERVER[ 'HTTP_USER_AGENT' ]-Variablen. Sie könnte ebenfalls gefälscht daherkommen. Behandeln Sie den Inhalt deshalb genauso wie ungefiltertes HTML:

<?php
echo 'Ihr Browser ist:' . wp_kses( $_SERVER['HTTP_USER_AGENT'], wp_kses_allowed_html() );
?>

REQUEST_URI und PHP_SELF

Beide oben genannten Variablen zeigen auf die zuletzt aufgerufene Seite. Aber vorsichtig: die Variablen übernehmen alles, was in der URL-Zeile des Browsers steht. So wird aus:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
	<input type="text" name="first_name" />
	<input type="submit" value="Abschicken" />
</form>

und dem Aufrufen des Scripts z.B. über die URL http://localhost/test.php/%22%3E%3Cscript%3Ealert('xss')%3C/script%3E%3Cfoo%22 schonmal folgender Code:

<form action="/wpbuddy/test.php/"><script>alert('xss')</script><foo"" method="post">
	<input type="text" name="first_name" />
	<input type="submit" value="Abschicken" />
</form>

Dadurch wird das Javascript ausgeführt und bringt eine Meldung xss auf den Bildschirm.

Mittlerweile werden viele dieser Techniken bereits vom Webserver so umgewandelt, dass sie keinen Schaden mehr anrichten können. Aber: das klappt nicht immer und schon gar nicht bei älteren Programmversionen. Deswegen sollten Sie vorsorgen und solchen Inhalten niemals trauen.

Wenn Sie das Formular auf die gleiche Seite leiten wollen, lassen Sie im Notfall das action-Attribut einfach leer:

<form action="" method="post">
	<input type="text" name="first_name" />
	<input type="submit" value="Abschicken" />
</form>

Cookies

Sie kennen Cookies bereits. Das sind kleine Textdateien, die auf der Festplatte des Benutzers gespeichert werden. Sie dienen meist dazu, ihn wieder zu erkennen. Aber genau das macht sie unsicher. Da sie beim Benutzer gespeichert werden ist es auch möglich, den Inhalt zu bearbeiten und zu fälschen.