PHP-Filter für den Eigengebrauch

Sicherheit bei PHP: Bereinigen von Daten durch eine Web-Applikation

Die Übernahme von Daten in eine PHP-Anwendung stellt immer ein Sicherheitsrisiko dar. Jeder Eingabe muss man daher prinzipiell misstrauen. Internet Magazin beleuchtet den praktischen Einsatz von PHP-Filtern zum Überprüfen und Bereinigen von Daten durch eine Web-Applikation.

Scanner Koffer Röntgen Pistole Handgranate

© Archiv

Scanner Koffer Röntgen Pistole Handgranate

PHP-Filter

Die Übernahme von Daten in eine PHP-Anwendung stellt immer ein Sicherheitsrisiko dar. Jeder Eingabe muss man daher prinzipiell misstrauen. Internet Magazin beleuchtet den praktischen Einsatz von PHP-Filtern zum Überprüfen und Bereinigen von Daten durch eine Web-Applikation.

Eine Web-Applikation sollte aus Sicherheitsgründen jeglicher Eingabe grundsätzlich misstrauen und diese niemals ungeprüft übernehmen. Beim Erfassen von Daten aus Web-Formularen sollte immer eine Validierung und Bereinigung stattfinden. Aber es gibt auch weniger offensichtliche Eingabequellen, die ebenfalls ein Sicherheitsrisiko darstellen. Infrage kommen hier eigene Datenbanken, RSS-Feeds, die Daten einer Sitzung und nicht zuletzt $_SERVER. Daten in diesem Feld entstammen teilweise der Kommunikation mit dem Client (zum Beispiel QUERY_STRING, HTTP_ACCEPT, HTTP_USER_AGENT oder REQUEST_URI) und können von diesem manipuliert werden.

Scanner Koffer Röntgen Pistole Handgranate

© Archiv

Ein klassisches Beispiel liefert die Variable PHP_SELF: Wer sie nicht korrekt bereinigt, liefert seine Applikation Cross-Site-Scripting-Angriffen (XSS) aus.

Zum Überprüfen und Bereinigen der Eingabe mussten PHP-Entwickler in der Vergangenheit eigene Funktionen entwerfen. Seit PHP 5.2 zeichnen dafür spezielle Filter-Funktionen verantwortlich, deren Einsatz allerdings optional ist.

Die eingebauten PHP-Filter haben sowohl eingeschworene Befürworter als auch überzeugte Gegner. Kritiker der PHP-Filter betonen, dass PHP-Filterfunktionen eigene Sicherheitslücken enthalten können, dass sie außerdem die Unterstützung durch den Server voraussetzen und dass sie vergleichsweise langsam ablaufen.

Befürworter der PHP-Filter argumentieren, dass die zusätzliche Leistung eigener Lösungen den enormen Entwicklungsaufwand in den meisten Fällen nicht rechtfertigt. Es sei demnach besser, sich auf den Schutz der eingebauten PHP-Filter zu verlassen als auf eigene, unter Zeitdruck programmierte und möglicherweise unzureichend getestete Lösungen in einem so sicherheitskritischen Bereich wie der Verarbeitung der Eingabe zu setzen.

Filter im Überblick

Im PHP-Core gibt es drei Filter-Typen: • Validieren der Eingabe • Bereinigen und Kodieren der Eingabe • Weiterreichen der Eingabe und einen Callback-Filter zum Verarbeiten der Eingabe mithilfe eigener, benutzerdefinierter Filterfunktionen

Einen Überblick über alle verfügbaren Filter erhalten Sie mit dem Befehl filter_list().

Filter zum Validieren der Eingabe folgen strikten Formatregeln und lehnen einfach jegliche Eingabe ab, die diese Regeln nicht einhält. Validierungsfilter geben im Erfolgsfall die ursprünglichen Daten einfach unverändert zurück. In jedem anderen Fall liefern sie den Wert FALSE. PHP-Filter zum Validieren der Eingabe überprüfen sie lediglich, ohne sie zu verändern. Filter, die die Eingabe bereinigen, führen keine Validierung durch; sie entfernen lediglich unerwünschte Zeichen und geben in jedem Fall eine modifizierte Zeichenkette zurück.

Filterfunktionen

Zum Zugriff auf PHP-Filter dienen sogenannte Filterfunktionen. Filterfunktionen können die Eingabe aus verschiedenen Quellen entgegennehmen und an einen Filter übergeben. Zum Überprüfen, ob die Variable eines bestimmten Typs überhaupt existiert, können Sie die Funktion filter_has_var(Eingabequelle, Variablenname) verwenden.

Sicherheit bei PHP

© Archiv

Ausgabe der verfügbaren PHP-Filter mittels filter_list().

Als Eingabequellen akzeptiert die Funktion INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER und INPUT_ENV. Wenn die Variable tatsächlich existiert, liefert die Funktion den Wert TRUE und ansonsten FALSE, zum Beispiel:

if(!filter_has_var(INPUT_POST,
"name")) { /* Fehlermeldung */ }
else { /* Aufruf konkreter Filter-
Funktionen */ }

Mittels der Funktion filter_input(Eingabe quelle, Variablenname, Filter, Optionen) können Sie die Eingabe aus einer Quelle außerhalb des Skriptes erfassen und die betreffenden Daten filtern, zum Beispiel:

if (!filter_input(INPUT_POST, 'email',
FILTER_VALIDATE_EMAIL)) { echo "E-Mail-Adresse ungültig"; }
else { echo "Korrekte Adresse"; }

Zum Erfassen und Filtern mehrerer Variablen gleichzeitig aus einer vorgegebenen Eingabequelle außerhalb des Skriptes dient die Funktion filter_input_array(Eingabequelle, Argumente). Mithilfe dieser Funktion können Sie die einzelnen Variablen an verschiedene PHP-Filter übergeben.

Im Erfolgsfalle liefert die Funktion einfach die Werte der betreffenden Variablen zurück. Handelt es sich bei dem zweiten Parameter um ein Array, muss dieses als ein assoziatives Feld angelegt sein, in dem die Namen der Eingabevariablen als Schüssel fungieren und der Feldwert muss eine Filter-ID oder ein Array beinhalten, welches den zu verwendenden Filter samt aller Optionen festlegt.

Mehr zum Thema

Youtube Sperre umgehen GEMA
Videos freischalten

So umgehen Sie die GEMA-Sperre bei Youtube. Was Sie dazu brauchen, und wie es am einfachsten geht.
Neue Fritzboxen unterstützen den AC-Standard.
WLAN-Geschwindigkeit verdoppeln

Mehr WLAN-Geschwindigkeit: Mit dem WLAN-Standard 802.11ac und den richtigen Geräten und Einstellungen verdoppeln Sie den Datendurchsatz.
Netflix auf dem TV
Programm in der Übersicht

Welche Filme und Serien gibt es bei Netflix eigentlich zu sehen? Was ist neu im Streaming-Angebot? Diese Antworten helfen weiter.
Netflix
Streaming

Preise, kompatible Geräte, Datenrate, Serien- und Filmangebot von Netflix: Wir beantworten die wichtigsten Fragen rund um den Streaming-Dienst.
E.T. – Der Außerirdische
Vorschau auf Film- und Serien-Highlights

Amazon Prime Instant Video lockt im Dezember 2016 mit Film-Highlights wie "E.T.", "Fast & Furious 7" und der Serie "Ku’damm 56​".