PHP-Filter (Filter)
- Vorherige Seite PHP Exception
- Nächste Seite MySQL-Übersicht
PHP-Filter werden zur Validierung und Filterung von Daten aus unsicheren Quellen verwendet, wie z.B. Benutzerinput.
Was sind PHP-Filter?
PHP-Filter werden zur Validierung und Filterung von Daten aus unsicheren Quellen verwendet.
Die Validierung und Filterung von Benutzerinput oder benutzerdefinierten Daten ist ein wichtiger Bestandteil jeder Webanwendung.
Das Design der PHP-Filter-Erweiterung zielt darauf ab, die Datenfilterung einfacher und schneller zu gestalten.
Warum Filter verwenden?
Fast alle Web-Anwendungen sind von externen Eingaben abhängig. Diese Daten stammen in der Regel von Benutzern oder anderen Anwendungen (z.B. Web-Services). Durch die Verwendung von Filtern können Sie sicherstellen, dass die Anwendung den richtigen Eingabetyp erhält.
Sie sollten immer externe Daten filtern!
Input-Filter sind eines der wichtigsten Themen für Anwendungssicherheit.
Was ist externe Daten?
- Eingangsdaten von Formularen
- Cookies
- Servervariablen
- Ergebnis der Datenbankabfrage
Funktionen und Filter
Um Variablen zu filtern, verwenden Sie eine der folgenden Filterfunktionen:
- filter_var() - Filtern Sie eine einzelne Variable mit einem bestimmten Filter
- filter_var_array() - Filtern Sie mehrere Variablen mit denselben oder verschiedenen Filtern
- filter_input - Holen Sie eine Eingangsvariable und filtern Sie sie
- filter_input_array - Holen Sie mehrere Eingangsvariablen und filtern Sie sie mit denselben oder verschiedenen Filtern
In dem folgenden Beispiel verwenden wir die Funktion "filter_var()", um einen Integer zu validieren:
<?php $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT);) { echo("Integer is not valid"); } else { echo("Integer is valid"); } ?>
Das obige Codebeispiel verwendet den Filter "FILTER_VALIDATE_INT", um die Variable zu filtern. Da der Integer gültig ist, lautet die Ausgabe des Codes: "Integer is valid".
Wenn wir versuchen, eine Variable mit einem nicht-ganzen Zahl zu verwenden, lautet die Ausgabe: "Integer is not valid".
Für eine vollständige Liste von Funktionen und Filtern besuchen Sie bitte unsere PHP Filter Referenzhandbuch.
Validating und Sanitizing
Es gibt zwei Filter:
Validating-Filter:
- Verwendet, um Benutzerinput zu validieren
- Strenges Formatregel (z.B. URL- oder E-Mail-Validierung)
- Liefert den erwarteten Typ zurück, wenn erfolgreich, sonst FALSE
Sanitizing-Filter:
- Verwendet, um bestimmte Zeichen in einer Zeichenkette zu erlauben oder zu verbieten
- Keine Datenformatregeln
- Liefert immer eine Zeichenkette zurück
Optionen und Flags
Optionen und Flags werden verwendet, um zusätzliche Filteroptionen für einen bestimmten Filter hinzuzufügen.
Verschiedene Filter haben unterschiedliche Optionen und Flags.
In dem folgenden Beispiel verwenden wir "filter_var()" sowie die Optionen "min_range" und "max_range", um einen Integer zu validieren:
<?php $var=300; $int_options = array; "options"=>array ( "min_range"=>0, "max_range"=>256 ) ); if(!filter_var($var, FILTER_VALIDATE_INT, $int_options);) { echo("Integer is not valid"); } else { echo("Integer is valid"); } ?>
Wie im obigen Code, müssen die Optionen in einem nach "options" benannten verwandten Array platziert werden. Wenn Sie Flags verwenden, müssen Sie sie nicht im Array platzieren.
Da das Integer "300" nicht im angegebenen Bereich liegt, wird die Ausgabe des obigen Codes "Integer ist nicht gültig" sein.
Für eine vollständige Liste von Funktionen und Filtern besuchen Sie bitte CodeW3C.com. PHP Filter ReferenzhandbuchSie können die verfügbaren Optionen und Flags für jeden Filter sehen.
Eingabeverifizierung
Lassen Sie uns versuchen, die Eingaben aus dem Formular zu überprüfen.
Das erste, was wir tun müssen, ist zu bestätigen, ob die gesuchten Eingabedaten existieren.
Dann verwenden wir die Funktion filter_input(), um die Eingabedaten zu filtern.
Im folgenden Beispiel wird die Eingabevariable "email" an die PHP-Seite übertragen:
<?php if(!filter_has_var(INPUT_GET, "email")) { echo("Der Eingabetyp existiert nicht"); } else { if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo "E-Mail ist nicht gültig"; } else { echo "E-Mail ist gültig"; } } ?>
Erklärung des Beispiels:
Ein Beispiel in den obigen Beispiel hat eine Eingabevariable (email), die über den "GET"-Methoden übertragen wird:
- Überprüfen Sie, ob es eine "GET"-Artige "email"-Eingabevariable gibt
- Wenn es eine Eingabevariable gibt, überprüfen Sie, ob es sich um eine gültige E-Mail-Adresse handelt
Eingabebereinigung
Lassen Sie uns versuchen, die URL von der Formularübermittlung zu bereinigen.
Zunächst müssen wir bestätigen, ob die gesuchten Eingabedaten existieren.
Dann verwenden wir die Funktion filter_input(), um die Eingabedaten zu bereinigen.
Im folgenden Beispiel wird die Eingabevariable "url" an die PHP-Seite übertragen:
<?php if(!filter_has_var(INPUT_POST, "url")) { echo("Der Eingabetyp existiert nicht"); } else { $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL); } ?>
Erklärung des Beispiels:
Ein Beispiel in den obigen Beispiel hat eine Eingabevariable (url), die über den "POST"-Methoden übertragen wird:
- Überprüfen Sie, ob es eine "POST"-Artige "url"-Eingabevariable gibt.
- Wenn diese Eingabevariable existiert, wird sie bereinigt (ungültige Zeichen entfernt) und im $url Variable gespeichert.
Wenn die Eingabevariable ähnlich aussieht: "http://www.W3非o法ol.com.c字符n/", dann sollte die bereinigte $url Variable so aussehen:
http://www.codew3c.com/
Mehrere Eingaben filtern
Formulare bestehen normalerweise aus mehreren Eingabefeldern. Um das mehrfache Aufrufen von filter_var oder filter_input zu vermeiden, können wir filter_var_array oder die Funktion filter_input_array verwenden.
In diesem Beispiel verwenden wir die Funktion filter_input_array() zur Filterung von drei GET-Variablen. Das empfangene GET-Variablen sind ein Name, ein Alter und eine E-Mail-Adresse:
<?php $filters = array ( "name" => array ( "filter"=>FILTER_SANITIZE_STRING ), "age" => array ( "filter"=>FILTER_VALIDATE_INT, "options"=>array ( "min_range"=>1, "max_range"=>120 ) ), "email"=> FILTER_VALIDATE_EMAIL, ); $result = filter_input_array(INPUT_GET, $filters); if (!$result["age"]) { echo("Alter muss eine Zahl zwischen 1 und 120 sein.<br />"); } elseif (!$result["email"]) { echo("E-Mail ist nicht gültig.<br />"); } else { echo("User input is valid"); } ?>
Erklärung des Beispiels:
Im obigen Beispiel gibt es drei Eingangsvariablen, die über die Methode "GET" übertragen werden (name, age und email).
- Setzen Sie ein Array, das die Namen der Eingangsvariablen und die für die spezifischen Eingangsvariablen verwendeten Filter enthält.
- Rufen Sie die Funktion filter_input_array auf und geben Sie die GET-Eingangsvariablen sowie das soeben festgelegte Array als Parameter weiter.
- Überprüfen Sie, ob die Variablen "age" und "email" im Variablen $result einen ungültigen Eingang haben. (Wenn es ungültige Eingaben gibt,)
Der zweite Parameter der Funktion filter_input_array() kann ein Array oder die ID eines einzigen Filters sein.
Wenn der Parameter die ID eines einzigen Filters ist, wird dieser angegebene Filter alle Werte im Eingabearray filtern.
Wenn der Parameter ein Array ist, muss dieses Array den folgenden Regeln folgen:
- Es muss ein assoziatives Array sein, das die Eingangsvariablen als Schlüssel des Arrays enthält (z.B. "age" als Eingangsvariable)
- Der Wert dieses Arrays muss die ID des Filters sein oder ein Array sein, das den Filter, die Markierung und die Optionen definiert
Filter Callback verwenden
Durch die Verwendung des FILTER_CALLBACK-Filters können Sie eine benutzerdefinierte Funktion aufrufen und sie als Filter verwenden. Auf diese Weise haben wir die vollständige Kontrolle über die Datenfilterung.
Sie können Ihre eigene benutzerdefinierte Funktion erstellen oder eine bestehende PHP-Funktion verwenden.
Bestimmen Sie die Methode, mit der Sie die Filterfunktion verwenden möchten, wie Sie die Optionen festlegen.
Im folgenden Beispiel verwenden wir eine benutzerdefinierte Funktion, um alle "_" in Leerzeichen umzuwandeln:
<?php function convertSpace($string) { return str_replace("_", " ", $string); } $string = "Peter_is_a_great_guy!"; echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace")); ?>
Das Ergebnis des obigen Codes ist wie folgt:
Peter ist ein großartiger Kerl!
Erklärung des Beispiels:
Der obige Beispiel ersetzt alle "_" durch Leerzeichen:
- Erstellen Sie eine Funktion, die "_" durch Leerzeichen ersetzt
- Rufen Sie die Funktion filter_var() auf, deren Parameter der FILTER_CALLBACK-Filter und ein Array sind, das unsere Funktion enthält
- Vorherige Seite PHP Exception
- Nächste Seite MySQL-Übersicht