Maison  >  Article  >  développement back-end  >  Connaissances connexes sur le filtre PHP (Filtre)

Connaissances connexes sur le filtre PHP (Filtre)

jacklove
jackloveoriginal
2018-05-08 09:22:041477parcourir

PHP Filter est utilisé pour vérifier et filtrer les données provenant de sources non sécurisées, telles que les entrées de l'utilisateur. Cet article en apprendra plus sur les filtres.

Que sont les filtres PHP ?

Les filtres PHP sont utilisés pour valider et filtrer les données provenant de sources non sécurisées.

La validation et le filtrage des entrées utilisateur ou des données personnalisées sont une partie importante de toute application Web.

Les extensions de filtre pour PHP sont conçues pour rendre le filtrage des données plus facile et plus rapide.

Pourquoi utiliser des filtres ?

Presque toutes les applications Web reposent sur une entrée externe. Ces données proviennent généralement des utilisateurs ou d'autres applications (telles que des services Web). En utilisant des filtres, vous pouvez vous assurer que votre application obtient le type d'entrée correct.

Vous devez toujours filtrer les données externes !

Le filtrage des entrées est l'un des sujets les plus importants en matière de sécurité des applications.

Qu'est-ce que les données externes ?

Saisie des données des formulaires

Cookies

Variables du serveur

Résultats des requêtes de base de données

Fonctions et filtres

À filtrez les variables, utilisez l'une des fonctions de filtre suivantes :

filter_var() - Filtre une seule variable par un filtre spécifié

filter_var_array() - Filtre des filtres identiques ou différents pour filtrer plusieurs variables

filter_input - Obtient une variable d'entrée et la filtre

filter_input_array - Obtient plusieurs variables d'entrée et les filtre en les filtrant avec des filtres identiques ou différents

Dans l'exemple suivant, nous validons un entier à l'aide de la fonction filter_var() :

<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
 {
 echo("Integer is not valid");
 }
else
 {
 echo("Integer is valid");
 }
?>

Le code ci-dessus utilise le filtre "FILTER_VALIDATE_INT" pour filtrer les variables. Puisque cet entier est légal, le résultat du code est : « L’entier est valide ».

Si nous essayons d'utiliser une variable non entière, le résultat est : "L'entier n'est pas valide".

Pour une liste complète des fonctions et des filtres, veuillez visiter notre manuel de référence des filtres PHP.

Validation et désinfection

Il existe deux types de filtres :

Filtre de validation :

Utilisé pour valider la saisie de l'utilisateur

Format strict règles (telles que la validation d'URL ou d'e-mail)

Renvoie le type attendu en cas de succès, FALSE en cas d'échec

Filtre de désinfection :

est utilisé pour autoriser ou interdire les caractères spécifiés dans la chaîne

Aucune règle de format de données

Renvoie toujours la chaîne

Options et indicateurs

Les options et les indicateurs sont utilisés pour spécifier que les filtres ajoutent des options de filtrage supplémentaires.

Différents filtres ont des options et des indicateurs différents.

Dans l'exemple suivant, nous validons un entier en utilisant filter_var() avec les options "min_range" et "max_range" :

<?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");
 }
?>

Comme le code ci-dessus, l'option doit être dans un tableau associé appelé « options ». Si vous utilisez des indicateurs, ils n'ont pas besoin d'être dans un tableau.

Puisque l'entier est "300", ce qui n'est pas dans la plage spécifiée, la sortie du code ci-dessus sera "L'entier n'est pas valide".

Pour une liste complète des fonctions et des filtres, veuillez visiter le manuel de référence des filtres PHP fourni par W3School. Vous pouvez voir les options et les indicateurs disponibles pour chaque filtre.

Validation de la saisie

Essayons de valider la saisie d'un formulaire.

La première chose que nous devons faire est de confirmer que les données d'entrée que nous recherchons existent.

Ensuite, nous utilisons la fonction filter_input() pour filtrer les données d'entrée.

Dans l'exemple suivant, la variable d'entrée "email" est passée à la page PHP :

<?php
if(!filter_has_var(INPUT_GET, "email"))
 {
 echo("Input type does not exist");
 }
else
 {
 if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
  {
  echo "E-Mail is not valid";
  }
 else
  {
  echo "E-Mail is valid";
  }
 }
?>

Explication de l'exemple :

L'exemple ci-dessus a une passe "GET" Variable d'entrée (email) envoyée par la méthode :

Vérifier s'il existe une variable d'entrée "email" de type "GET"

S'il existe une variable d'entrée, vérifier si elle est une adresse e-mail valide

Sanitize input

Essayons de nettoyer l'URL transmise depuis le formulaire.

Tout d'abord, nous voulons confirmer que les données d'entrée que nous recherchons existent.

Ensuite, nous utilisons la fonction filter_input() pour purifier les données d'entrée.

Dans l'exemple suivant, la variable d'entrée "url" est passée à la page PHP :

<?php
if(!filter_has_var(INPUT_POST, "url"))
 {
 echo("Input type does not exist");
 }
else
 {
 $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL);
 }
?>

Explication de l'exemple :

L'exemple ci-dessus a un pass "POST" Variable d'entrée (url) transmise par la méthode :

Détecter s'il existe une variable d'entrée "url" de type "POST"

Si cette variable d'entrée existe, purifier la (supprimer caractères illégaux), et stockez-la dans la variable $url

Si la variable d'entrée est similaire à celle-ci : "http://www.W3illegitimeol.com.ccharacters/", alors la variable $url purifiée devrait va comme ceci :

http://www.W3School.com.cn/

Filtrer plusieurs entrées

Les formulaires se composent généralement de plusieurs champs de saisie. Pour éviter les appels répétés à filter_var ou filter_input, nous pouvons utiliser filter_var_array ou la fonction filter_input_array.

Dans cet exemple, nous utilisons la fonction filter_input_array() pour filtrer trois variables GET. Les variables GET reçues sont un nom, un âge et une adresse email :

<?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("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 函数,参数包括 GET 输入变量及刚才设置的数组

检测 $result 变量中的 "age" 和 "email" 变量是否有非法的输入。(如果存在非法输入,)

filter_input_array() 函数的第二个参数可以是数组或单一过滤器的 ID。

如果该参数是单一过滤器的 ID,那么这个指定的过滤器会过滤输入数组中所有的值。

如果该参数是一个数组,那么此数组必须遵循下面的规则:

必须是一个关联数组,其中包含的输入变量是数组的键(比如 "age" 输入变量)

此数组的值必须是过滤器的 ID ,或者是规定了过滤器、标志以及选项的数组

使用 Filter Callback

通过使用 FILTER_CALLBACK 过滤器,可以调用自定义的函数,把它作为一个过滤器来使用。这样,我们就拥有了数据过滤的完全控制权。

您可以创建自己的自定义函数,也可以使用已有的 PHP 函数。

规定您准备用到过滤器函数的方法,与规定选项的方法相同。

在下面的例子中,我们使用了一个自定义的函数把所有 "_" 转换为空格:

<?phpfunction convertSpace($string)
{
return str_replace("_", " ", $string);
}$string = "Peter_is_a_great_guy!";
echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace"));
?>

以上代码的结果是这样的:

Peter is a great guy!

例子解释:

上面的例子把所有 "_" 转换成空格:

创建一个把 "_" 替换为空格的函数

调用 filter_var() 函数,它的参数是 FILTER_CALLBACK 过滤器以及包含我们的函数的数组。

本篇对过滤器进行了讲解,更多的学习资料清关注php中文网即可观看。

相关推荐:

关于对PHP 异常处理的操作

关于PHP 文件打开/读取/读取相关知识

关于PHP Include 文件的讲解

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn