201011Jul

Webentwicklung: GET- und POST-Daten ab PHP 5.2

Das Filtern von GET- oder POST-Daten, die über PHP eingelesen werden (per "$_GET" oder "$_POST"), stellt einen wichtigen Aspekt für die Absicherung von PHP-Anwendungen dar. Eingehende Daten, die von Benutzern stammen (etwa bei Formularen), müssen durch verschiedene Funktionen gefiltert werden (Escaping), um möglichen Angriffen vorzubeugen. Wer auf PHP 5.2 zurückgreifen kann, sollte sich zu diesem Thema den Artikel bei php|architect ansehen. Darin wird beschrieben, wie sich das eingebaute Filter-System von PHP nutzen lässt, um GET- und POST-Daten sicher zu filtern.

php|architect - Never Use $_GET Again

Die Funktionen werden mit "filter_input()" oder "filter_input_array()" aufgerufen und können genutzt werden wie folgt:

  • <?php
  • $string = filter_input(INPUT_GET, "string", FILTER_SANITIZE_STRING);
  • ?>

Mit dem Parameter "FILTER_SANITIZE_STRING" werden die Daten also von ungewünschten Zeichen befreit, die üblicherweise mit "stripslashes()", "strip_tags()", "htmlentities()" oder "htmlspecialchars()" gefiltert werden müssen. Neben der Option "INPUT_GET" sind zudem die Angaben "INPUT_POST", "INPUT_SERVER", "INPUT_COOKIE" oder "INPUT_ENV" möglich.

RSS-Feed abonnieren Bookmark bei Del.icio.us

Kommentare

maXus schrieb am 13.07.2010 #1

Hmm danke für den Tipp. Hatte mich in letzter Zeit mehr mit MySQLi beschäftigt und hier gibt es ähnliche Lösungen, für die Queries. Habe dann angefangen, mir für GET und POST eigene Funktionen zu bauen. Das ist echt hilfreich.

Mich wundert nur, dass diese Funktionen in keinem Fachbuch oder Onlineartikel nur ansatzweise erwähnt werden. Echt schade drum.

Matthias schrieb am 13.07.2010 #2

Ja, Prepared Statements sind auf jeden Fall ein Vorteil. Ich kannte diese Filter-Funktionen auch noch nicht und mich hat es ebenfalls verwundert, dass sie kaum erwähnt werden. Immerhin sind sie in der offiziellen PHP-Dokumentation zu finden, aber von selbst kommt man ja nicht auf so etwas ;-)