Auge: Gefahren beim Kontextwechsel: Variablen in der URL die der User

Beitrag lesen

Hallo

ich habe den Artikel zum Kontextwechsel ( http://aktuell.de.selfhtml.org/artikel/php/kontextwechsel/ ) gelesen, bin aber aus dem Teil, wo es um URLs geht nicht schlau geworden.

Folgendes passiert auf meiner Homepage häufig:
In einem Formular wird eine Eingabe des Users durch die URL an ein PHP Script gesendet. Dort angekommen wird sie schließlich auf der Seite ausgelesen. MEine Frage ist nun, mit welchen Maßnahmen schütze ich mich dagegen, dass ein User irgendeinen Script über das Formular ausführt? Angenommen er sendet irgendwie sowas: <script>[... hier wird meine Seite gehackt] </script>.

Wird die Eingabe in eine MySQL-Datenbank geschrieben, muss der String für den Query mit mysql_real_escape_string (oder der mysqli-Variante) maskiert werden.

Wird er in einer Textdatei gespeichert, lasse ihn, wie er ist.

Zur sicherung habe ich die variable, gleich nachdem sie im PHP_Script empfangen wird mit htmlspecialchars() versehen. Also so:

$variable=htmlspecialchars($_GET['variable'], ENT_QUOTES);

Viel zu früh.

später wird sie dann so im Browser mir $variable ausgebeben.

Das wäre auch der richtige Zeitpunkt, htmlspecialchars anzuwenden. Beachte, dass es sein kann, dass du die Daten in einem anderen Kontext als HTML brauchst. *Dann* sind die HTML-gerecht maskierten zeichen fehl am Platz.

Im Anderen Fall übergebe ich sie wieder an eine URL:

header("LOCATION: testscript.php?variable=$variable");

Abgesehen von der Tatsache, dass Location eine absolute URL erwartet (auch wenn viele Browser mit deinem Fehler leben können), liegt hier der Kontextwechsel vor. Der Inhalt des Parameters "variable" muss natürlich URL-Parametergerecht maskiert werden. Bei PHP erledigt das rawurlencode.

Tschö, Auge

--
Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
Terry Pratchett, "Wachen! Wachen!"
Veranstaltungsdatenbank Vdb 0.3