PHP-Filter werden verwendet, um Daten aus unsicheren Quellen, wie z. B. Benutzereingaben, zu validieren und zu filtern.
PHP-Filter werden zum Validieren und Filtern von Daten aus unsicheren Quellen verwendet.
Das Validieren und Filtern von Benutzereingaben oder benutzerdefinierten Daten ist ein wichtiger Bestandteil jeder Webanwendung.
Filtererweiterungen für PHP sollen die Datenfilterung einfacher und schneller machen.
Fast alle Webanwendungen sind auf externen Input angewiesen. Diese Daten stammen in der Regel von Benutzern oder anderen Anwendungen (z. B. Webdiensten). Durch die Verwendung von Filtern können Sie sicherstellen, dass Ihre Anwendung den richtigen Eingabetyp erhält.
Sie sollten immer externe Daten filtern!
Eingabefilterung ist eines der wichtigsten Themen zur Anwendungssicherheit.
Um Variablen zu filtern, verwenden Sie eine der folgenden Filterfunktionen:
Im folgenden Beispiel validieren wir eine Ganzzahl mit der Funktion filter_var():
<?php $int = 123; if(!<code>filter_var($int, FILTER_VALIDATE_INT)</code>) { echo("Integer is not valid"); } else { echo("Integer is valid"); } ?>
Der obige Code verwendet den Filter „FILTER_VALIDATE_INT“, um Variablen zu filtern. Da diese Ganzzahl zulässig ist, lautet die Ausgabe des Codes: „Ganzzahl ist gültig“.
Wenn wir versuchen, eine nicht ganzzahlige Variable zu verwenden, lautet die Ausgabe: „Ganzzahl ist ungültig“.
Eine vollständige Liste der Funktionen und Filter finden Sie in unserem PHP-Filter-Referenzhandbuch.
Es gibt zwei Arten von Filtern:
Optionen und Flags werden verwendet, um dem angegebenen Filter zusätzliche Filteroptionen hinzuzufügen.
Verschiedene Filter haben unterschiedliche Optionen und Flags.
Im folgenden Beispiel validieren wir eine Ganzzahl mit filter_var() mit den Optionen „min_range“ und „max_range“:
<?php $var=300; <span class="marked"> $int_options = array( "options"=>array ( "min_range"=>0, "max_range"=>256 ) ); if(!<code>filter_var($var, FILTER_VALIDATE_INT, $int_options)</code>) { echo("Integer is not valid"); } else { echo("Integer is valid"); } ?>
Genau wie im obigen Code müssen Optionen in ein zugehöriges Array namens „Optionen“ eingefügt werden. Wenn Flags verwendet werden, müssen diese nicht in einem Array vorhanden sein.
Da die Ganzzahl „300“ ist, was nicht innerhalb des angegebenen Bereichs liegt, lautet die Ausgabe des obigen Codes „Ganzzahl ist ungültig“.
Eine vollständige Liste der Funktionen und Filter finden Sie im PHP-Filter-Referenzhandbuch von W3School. Sie können die verfügbaren Optionen und Flags für jeden Filter sehen.
Versuchen wir, die Eingabe aus dem Formular zu validieren.
Als Erstes müssen wir bestätigen, dass die gesuchten Eingabedaten vorhanden sind.
Dann verwenden wir die Funktion filter_input(), um die Eingabedaten zu filtern.
Im folgenden Beispiel wird die Eingabevariable „email“ an die PHP-Seite übergeben:
<?php if(!filter_has_var(INPUT_GET, "email")) { echo("Input type does not exist"); } else { if (!<code>filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)</code>) { echo "E-Mail is not valid"; } else { echo "E-Mail is valid"; } } ?>
Im obigen Beispiel wird eine Eingabevariable (E-Mail) über die Methode „GET“ übergeben:
Versuchen wir, die vom Formular übergebene URL zu bereinigen.
Zuerst möchten wir bestätigen, dass die gesuchten Eingabedaten vorhanden sind.
Dann verwenden wir die Funktion filter_input(), um die Eingabedaten zu bereinigen.
Im folgenden Beispiel wird die Eingabevariable „url“ an die PHP-Seite übergeben:
<?php if(!filter_has_var(INPUT_POST, "url")) { echo("Input type does not exist"); } else { $url = <code>filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL)</code>; } ?>
Im obigen Beispiel wird eine Eingabevariable (URL) über die Methode „POST“ übergeben:
Wenn die Eingabevariable etwa so aussieht: „http://www.W3 illegal ol.com.c Zeichen n/“, dann sollte die gereinigte $url-Variable so aussehen:
http://www.W3School.com.cn/
表单通常由多个输入字段组成。为了避免对 filter_var 或 filter_input 重复调用,我们可以使用 filter_var_array 或 the filter_input_array 函数。
在本例中,我们使用 filter_input_array() 函数来过滤三个 GET 变量。接收到的 GET 变量是一个名字、一个年龄以及一个邮件地址:
<?php <span class="marked">$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 = <code>filter_input_array(INPUT_GET, $filters)</code>;(array(3) { ["name"]=> string(1) "1" ["age"]=> bool(false) ["email"]=> string(8) "1@qq.com" }) if (!$result["age"]) { echo("Age must be a number between 1 and 120.<br />"); } elseif(!$result["email"]) { echo("E-Mail is not valid.<br />"); } else { echo("User input is valid"); } ?>
上面的例子有三个通过 "GET" 方法传送的输入变量 (name, age and email)
filter_input_array() 函数的第二个参数可以是数组或单一过滤器的 ID。
如果该参数是单一过滤器的 ID,那么这个指定的过滤器会过滤输入数组中所有的值。
如果该参数是一个数组,那么此数组必须遵循下面的规则:
通过使用 FILTER_CALLBACK 过滤器,可以调用自定义的函数,把它作为一个过滤器来使用。这样,我们就拥有了数据过滤的完全控制权。
您可以创建自己的自定义函数,也可以使用已有的 PHP 函数。
规定您准备用到过滤器函数的方法,与规定选项的方法相同。
在下面的例子中,我们使用了一个自定义的函数把所有 "_" 转换为空格:
<?php <span class="marked">function convertSpace($string) { return str_replace("_", " ", $string); } $string = "Peter_is_a_great_guy!"; echo <code>filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace")); ?>
以上代码的结果是这样的:
Peter is a great guy!
上面的例子把所有 "_" 转换成空格: