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

HTML5: Quick Reference Guide
Ratgeber: "HTML5"

Die wichtigsten Tags auf einen Blick: In unserem praktischen Arbeitsblatt finden Sie einen wertvollen Begleiter für die Umstellung Ihrer Webprojekte…
internet, webdesign, google, content, ranking, seo, suchmaschine
Ratgeber: Urheberrecht

Einzigartige Inhalte bieten Lesern Mehrwert und sind ein wichtiges Qualitätsmerkmal. Ärgerlich, wenn sich jemand durch Kopieren an fremden Ergebnissen…
Die besten HTML5-Tipps
Neue Tipps & Tricks für blitz.io

Wer die Leistung einer Applikation ermitteln möchte, braucht keine Skripte zu schreiben, sondern kann einen der zahlreichen Online-Dienste einspannen.…
image.jpg
Ratgeber: Webentwicklung

Die clientseitige Javascript-Entwicklung bietet fast keine Entwicklungsumgebungen und auch keine vernünftigen Werkzeuge zur Fehlersuche. Eine der…
internet, webdesign, meteor, webapplikationen
Ratgeber

Mit Meteor sollen Entwickler in kurzer Zeit Umgebungen für Webapplikationen erstellen können, ohne sich um lästige Details kümmern zu müssen. Wir…