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.

© 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.

© 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.

© 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 lesen

Chronologische Liste und Netflix-Links -

Neuerscheinungen in der Übersicht -

Vorschau auf Film- und Serien-Highlights -

Mehr zum Thema

Webdesign

Adobe Illustrator wird im Webdesign immer beliebter. Wie Sie das Tool richtig einsetzen, erfahren Sie hier.
Facebook

Was sind die Implikationen für Unternehmen und Endanwender bei Facebooks neuer Suche Graph Search?
Online-Recht

Allgemeine Geschäftsbedingungen liest sich niemand gerne durch. Sie sind jedoch notwendig und äußerst sinnvoll. Worauf sie achten sollten.
Online-Recht in der Cloud

Dateien werden immer häufiger in der Cloud bereitgestellt. Rechtlich ist das jedoch durchaus problematisch. Wir klären über das Urheberrecht in der…
E-Commerce-Logistik

Für den Erfolg eines Online-Shops sind zahlreiche Faktoren verantwortlich. Neben Produktvielfalt und Darstellung der Waren gehört auch die Logistik.