W3docs

Erweiterte PHP-Filter: Ein umfassender Leitfaden

Lernen Sie erweiterte PHP-Filter kennen: Flags, Callbacks, Batch-Filterung, Standardwerte und typische Fallstricke in der Produktion.

Das Filtern von Eingaben gehört zu den wichtigsten Sicherheitsgewohnheiten in PHP: Jeder Wert, der von außerhalb Ihres Codes eintrifft — Formularfelder, Query-Strings, Cookies, API-Payloads — sollte als nicht vertrauenswürdig behandelt werden, bis er validiert oder bereinigt wurde. PHP wird mit einer integrierten Filter-Extension geliefert, die genau das erledigt, sodass Sie für gängige Prüfungen selten reguläre Ausdrücke von Hand schreiben müssen. Dieses Kapitel geht über die Grundlagen hinaus und behandelt Filter-Flags, Callbacks, Batch-Filterung, Standardwerte und die Fallstricke, über die man im Produktionsbetrieb stolpert.

Wenn Sie noch nicht mit der Filter-Extension vertraut sind, beginnen Sie mit dem einführenden Kapitel PHP Filters und kehren Sie dann hierher zurück.

PHP-Filter verstehen

Ein Filter ist eine benannte Regel, die PHP über die Funktion filter_var() (und verwandte Funktionen) auf einen Wert anwendet. Ein Filter kann zwei Aufgaben erfüllen:

  • Validieren — prüft, ob ein Wert bereits einem Format entspricht, und gibt den Wert bei Erfolg oder false bei Misserfolg zurück. Der Wert wird nicht verändert.
  • Bereinigentransformiert einen Wert, indem unerwünschte Zeichen entfernt oder kodiert werden, und gibt den bereinigten String zurück.

Es ist wichtig zu wissen, welche Aufgabe benötigt wird: Validierung lehnt fehlerhafte Daten ab, Bereinigung schreibt sie um. Bei benutzerseitigen Formularen validiert man in der Regel zuerst (ablehnen) und bereinigt nur, wenn ein Wert akzeptiert und gesäubert werden muss (zum Beispiel beim HTML-Escaping vor der Anzeige).

Typen von Filtern

PHP bietet verschiedene Filtertypen für unterschiedliche Zwecke. Zu den am häufigsten verwendeten gehören:

  • Validate-Filter: Diese Filter werden zur Validierung von Daten eingesetzt, z. B. um zu prüfen, ob ein String eine gültige E-Mail-Adresse ist oder eine Zahl in einem bestimmten Bereich liegt.
  • Sanitize-Filter: Diese Filter werden zur Bereinigung von Daten verwendet, z. B. um schädliche Zeichen aus einem String zu entfernen oder Sonderzeichen in HTML-Entities umzuwandeln.
  • Benutzerdefinierte Filter: Mit diesen Filtern können Sie eigene Filterfunktionen für spezifische Anforderungen definieren.

Eine Handvoll Filter deckt die große Mehrheit der realen Anforderungen ab:

FilterAufgabeAnwendungsbeispiel
FILTER_VALIDATE_EMAILValidierenE-Mail-Adresse prüfen
FILTER_VALIDATE_INTValidierenGanzzahl prüfen, optional innerhalb eines Bereichs
FILTER_VALIDATE_FLOATValidierenGleitkommazahl prüfen
FILTER_VALIDATE_URLValidierenURL prüfen
FILTER_VALIDATE_IPValidierenIPv4/IPv6-Adresse prüfen
FILTER_SANITIZE_FULL_SPECIAL_CHARSBereinigenHTML-Sonderzeichen kodieren
FILTER_SANITIZE_NUMBER_INTBereinigenAlles außer Ziffern und +/- entfernen
FILTER_SANITIZE_EMAILBereinigenIn E-Mails unzulässige Zeichen entfernen

Mit filter_list() können Sie alle Filter auflisten, die Ihr Build unterstützt.

PHP-Filter verwenden

Die grundlegende Syntax zum Anwenden eines Filters lautet:

PHP filter_var-Funktionssyntax

filter_var($variable, $filter, $options);

Dabei ist $variable der zu filternde Wert, $filter eine Filterkonstante wie FILTER_VALIDATE_EMAIL, und das optionale Argument $options enthält Flags oder filterspezifische Optionen.

filter_var($variable, FILTER_VALIDATE_EMAIL);

Hier prüft filter_var(), ob der in $variable gespeicherte Wert eine gültige E-Mail-Adresse ist, und gibt bei Erfolg die E-Mail oder bei Misserfolg false zurück.

Es gibt auch dedizierte Funktionen zum direkten Lesen externer Eingaben — filter_input() für einen einzelnen Wert und filter_input_array() für mehrere — die aus INPUT_GET, INPUT_POST, INPUT_COOKIE usw. lesen. Verwenden Sie diese anstatt $_GET/$_POST direkt anzusprechen, da sie die originalen Anfragedaten lesen, auch wenn eine Superglobale verändert wurde.

Erweiterte PHP-Filter-Optionen

PHP-Filter verfügen auch über verschiedene erweiterte Optionen, mit denen ihr Verhalten angepasst werden kann. Zu den am häufigsten verwendeten Optionen gehören:

  • Flag-Optionen: Diese Optionen ändern das Filterverhalten, z. B. durch Erfordern eines bestimmten Datentyps oder das Zulassen mehrerer Werte. Zum Beispiel erlaubt FILTER_FLAG_EMAIL_UNICODE internationale Zeichen bei der E-Mail-Validierung.
  • Callback-Funktionen: Diese ermöglichen es, eine benutzerdefinierte Funktion an FILTER_CALLBACK für maßgeschneiderte Validierungs- oder Bereinigungslogik zu übergeben.
  • Array-Filterung: Verwenden Sie filter_var_array() oder filter_input_array(), um Filter auf mehrere Variablen gleichzeitig anzuwenden — besonders nützlich für die Verarbeitung von Formulardaten oder Query-Strings.

PHP-Filter-Beispiele

Hier sind einige Beispiele, wie PHP-Filter in der Praxis eingesetzt werden können:

PHP E-Mail mit filter_var validieren

php— editable, runs on the server

In diesem Beispiel wird die Funktion filter_var zur Validierung einer E-Mail-Adresse verwendet. Wenn die E-Mail-Adresse gültig ist, gibt das Skript „Email is valid" aus, andernfalls „Email is not valid".

PHP String mit filter_var bereinigen

php— editable, runs on the server

In diesem Beispiel wird die Funktion filter_var zur Bereinigung eines Strings verwendet. Der Filter FILTER_SANITIZE_FULL_SPECIAL_CHARS entfernt oder kodiert HTML-Tags und Sonderzeichen aus dem String, sodass ein sicherer und sauberer String entsteht, der in der Anwendung verwendet werden kann.

Erweiterte PHP-Filter-Beispiele

Um die volle Leistungsfähigkeit von PHP-Filtern zu nutzen, können Sie Callbacks und Array-Filterung einsetzen:

PHP-Filter mit Callback

<?php

function custom_sanitize($str) {
    return strtoupper(trim($str));
}

$input = "  hello world  ";
$result = filter_var($input, FILTER_CALLBACK, ["options" => "custom_sanitize"]);

echo $result; // Outputs: HELLO WORLD
?>

PHP-Array von Variablen filtern

<?php

$data = [
    "email" => "[email protected]",
    "age" => "25",
    "url" => "https://example.com"
];

$filters = [
    "email" => FILTER_VALIDATE_EMAIL,
    "age" => ["filter" => FILTER_VALIDATE_INT, "options" => ["min_range" => 1, "max_range" => 120]],
    "url" => FILTER_VALIDATE_URL
];

$result = filter_var_array($data, $filters);

print_r($result);
?>

Dies gibt aus:

Array
(
    [email] => [email protected]
    [age] => 25
    [url] => https://example.com
)

Wenn ein Wert seinen Filter nicht besteht, enthält der entsprechende Schlüssel false anstelle des Werts, sodass genau erkennbar ist, welches Feld ungültig war.

Eine Ganzzahl innerhalb eines Bereichs validieren

Die Optionen min_range und max_range veranlassen FILTER_VALIDATE_INT, Zahlen außerhalb des Bereichs abzulehnen — nützlich für Werte wie eine Menge oder ein Alter:

<?php

$age = "150";
$options = ["options" => ["min_range" => 1, "max_range" => 120]];

var_dump(filter_var($age, FILTER_VALIDATE_INT, $options)); // bool(false)
?>

Da 150 über max_range liegt, gibt der Filter false zurück, obwohl "150" ein vollkommen gültiger Ganzzahl-String ist.

Einen Standardwert bei fehlgeschlagener Validierung angeben

Die meisten Validate-Filter akzeptieren eine default-Option, sodass auf einen sicheren Wert zurückgegriffen werden kann anstatt false zu erhalten:

<?php

$price = filter_var("not-a-number", FILTER_VALIDATE_FLOAT, [
    "options" => ["default" => 0.0]
]);

var_dump($price); // float(0)
?>

Häufige Fallstricke

Einige Verhaltensweisen überraschen Einsteiger:

  • false ist ein gültiger Wert. Wenn ein Wert legitim 0 oder "0" ist, behandelt eine naive if (filter_var(...)) Prüfung ihn als Misserfolg. Vergleichen Sie explizit mit dem strikten Operator gegen false: if (filter_var($n, FILTER_VALIDATE_INT) === false).
  • Validierung ändert den Wert nicht. FILTER_VALIDATE_* gibt Ihren ursprünglichen Wert (bei Bedarf gecastet) oder false zurück; es wird nie bereinigt. Wenn Sie einen gesäuberten String benötigen, verwenden Sie einen FILTER_SANITIZE_*-Filter.
  • E-Mail-Validierung ist keine Zustellbarkeitsverifizierung. FILTER_VALIDATE_EMAIL prüft nur die Syntax — es kann nicht bestätigt werden, ob das Postfach existiert. Fügen Sie FILTER_FLAG_EMAIL_UNICODE hinzu, wenn Sie internationalisierte Adressen akzeptieren.
  • Bereinigung ist nicht dasselbe wie Escaping für SQL. Verwenden Sie Prepared Statements (oder mysqli_real_escape_string()) für Datenbankabfragen; Filter dienen der Formatbereinigung, nicht der Abfragesicherheit.

Fazit

Zusammenfassend lässt sich sagen, dass PHP-Filter ein unverzichtbares Werkzeug für Webentwickler sind, die Eingabedaten validieren und bereinigen möchten. Mit den verschiedenen verfügbaren Typen und Optionen können Sie Ihre Filter problemlos auf die spezifischen Anforderungen Ihrer Anwendung zuschneiden. Ob Sie E-Mails validieren, schädliche Zeichen entfernen oder benutzerdefinierte Validierungen durchführen möchten — PHP-Filter sind die richtige Wahl.

Vergessen Sie nicht, Filter mit anderen Sicherheitsmaßnahmen zu kombinieren — Prepared Statements, Output-Escaping und CSRF-Schutz — um Ihre Webanwendung so sicher wie möglich zu halten. Eine vollständige Anleitung finden Sie unter PHP Form Validation.

Übungen

Übung
Welche der folgenden Filter werden in PHP verwendet?
Welche der folgenden Filter werden in PHP verwendet?
Was this page helpful?