Filtre PHP
Les filtres PHP sont utilisés pour valider et filtrer les données provenant de sources non sécurisées, telles que les entrées de l'utilisateur.
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.
Tester, valider et filtrer les entrées utilisateur ou les données personnalisées est une partie importante de toute application Web.
L'extension de filtre PHP est conçue 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 ?
· Données d'entrée du formulaire
· Cookies
· Données des services Web
· Variables du serveur
· Résultats de la requête de base de données
Fonctions et filtres
Pour filtrer une variable, utilisez l'une des fonctions de filtre suivantes :
· filter_var() - Filtre une seule variable par un filtre spécifié
· filter_var_array() - Filtrer plusieurs variables avec des filtres identiques ou différents
· filter_input - Obtenir une variable d'entrée et l'appliquer Filtrer
· filter_input_array - Obtenez plusieurs variables d'entrée et filtrez-les via des filtres identiques ou différents
Exemple
Dans l'exemple suivant, nous avons vérifié un entier à l'aide de la fonction filter_var() :
★ FILTER_VALIDATE_INT Le filtre utilise un entier comme valeur de validation.
<?php header("Content-type:text/html;charset=utf-8"); $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("不是一个合法的整数"); } else { echo("是个合法的整数"); } ?>
Résultat de l'exécution du programme :
est un entier légal
Pour afficher la fonction complète et filtrer Pour une liste de filtres, visitez notre Manuel de référence des filtres PHP.
Validation et désinfection
Il existe deux types de filtres :
Validation Conteneur de filtrage :
· Utilisé pour valider la saisie de l'utilisateur
· Règles de format strictes (telles que la validation d'URL ou d'e-mail)
· Renvoie le type attendu en cas de succès, si Renvoie FALSE en cas d'échec
Filtre de désinfection :
· Utilisé pour autoriser ou interdire les caractères spécifiés dans la chaîne
· Aucune règle de format de données
· Toujours renvoyer la chaîne
options et indicateurs
options et les indicateurs sont utilisés pour ajouter des options de filtrage supplémentaires au filtre spécifié.
Différents filtres ont des options et des indicateurs différents.
Exemple
Dans l'exemple suivant, nous avons vérifié en utilisant filter_var() avec les options "min_range" et "max_range" Un entier :
<?php header("Content-type:text/html;charset=utf-8"); $var=300; $int_options = array( "options"=>array ( "min_range"=>0, //最小值 "max_range"=>256 //最大值 ) ); if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)) { echo("不是一个合法的整数"); } else { echo("是个合法的整数"); } ?>
Comme le code ci-dessus, les options doivent être mises 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", il n'est pas dans la plage spécifiée, la sortie du code ci-dessus sera :
n'est pas un entier légal
Pour une liste complète des fonctions et des filtres, veuillez visiter notre manuel de référence des filtres PHP. Vous pouvez voir les options et les indicateurs disponibles pour chaque filtre.
Validation de la saisie
Essayons de valider la saisie du 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.
Exemple
Dans l'exemple suivant, l'entrée la variable "email" est transmise à la page PHP via GET :
<?php header("Content-type:text/html;charset=utf-8"); if(!filter_has_var(INPUT_GET, "email")) { echo("没有 email 参数"); } else { if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo "不是一个合法的 E-Mail"; } else { echo "是一个合法的 E-Mail"; } } ?>
Résultat de l'exécution du programme :
Explication avec exemples
L'exemple ci-dessus a une variable d'entrée (e-mail) transmise via la méthode « GET » :
1 Détectez s'il existe une variable d'entrée « email » de type « GET ». "
2. Si la variable d'entrée existe, vérifiez s'il s'agit d'une adresse e-mail valide
Désinfecter les entrées
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.
Instance
Dans l'exemple suivant, la variable d'entrée "url" est passée à la page PHP :
<?php header("Content-type:text/html;charset=utf-8"); if(!filter_has_var(INPUT_GET, "url")) { echo("没有 url 参数"); } else { $url = filter_input(INPUT_GET, "url", FILTER_SANITIZE_URL); echo $url; } ?>
Explication de l'exemple
★FILTER_SANITIZE_URL Le filtre supprime tous les caractères d'URL illégaux de la chaîne.
L'exemple ci-dessus a une variable d'entrée (url) transmise via la méthode "GET":
1 Détectez s'il existe une variable d'entrée "url" de type "GET"
.2. Si cette variable d'entrée existe, nettoyez-la (supprimez les caractères illégaux) et stockez-la dans la variable $url
Si la variable d'entrée est une chaîne similaire à celle-ci : " http://www. ruåånoøøob.com/", alors la variable $url purifiée est la suivante :
Filtrer plusieurs entrées
Les formulaires se composent généralement de plusieurs champs de saisie. Pour éviter les appels répétés aux fonctions filter_var ou filter_input, nous pouvons utiliser filter_var_array ou la fonction filter_input_array.
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 e-mail :
<?php header("Content-type:text/html;charset=utf-8"); $filters = array ( "name" => array ( "filter_has_var"=>FILTER_SANITIZE_STRING ), "age" => array ( "filter_has_var"=>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("年龄必须在 1 到 120 之间。<br>"); } elseif(!$result["email"]) { echo("E-Mail 不合法<br>"); } else { echo("输入正确"); } ?>
Résultat de l'exécution du programme :
Explication des exemples
L'exemple ci-dessus a trois variables d'entrée (nom, âge et email) transmises via la méthode "GET":
1 Définissez un tableau contenant le nom. de la variable d'entrée et du filtre utilisé pour la variable d'entrée spécifiée
2. Appelez la fonction filter_input_array(), les paramètres incluent la variable d'entrée GET et le tableau que vous venez de définir
3. résultat Y a-t-il des entrées illégales dans les variables « âge » et « email » dans les variables ? (S'il y a une entrée illégale, la variable d'entrée est FALSE après avoir utilisé la fonction filter_input_array().)
Le deuxième argument de la fonction filter_input_array() peut être un tableau ou l'ID d'un seul filtre.
Si le paramètre est l'ID d'un seul filtre, alors le filtre spécifié filtrera toutes les valeurs du tableau d'entrée.
Si le paramètre est un tableau, alors le tableau doit suivre les règles suivantes :
· Doit être un tableau associatif dans lequel les variables d'entrée sont les clés du tableau (Par exemple, la variable d'entrée "age")
· La valeur de ce tableau doit être l'ID du filtre, ou un tableau spécifiant le filtre, les indicateurs et les options
Utiliser le rappel du filtre
★ FILTER_CALLBACK Le filtre utilise des fonctions définies par l'utilisateur pour filtrer les valeurs
En utilisant le filtre FILTER_CALLBACK, vous pouvez appeler une fonction personnalisée et l'utiliser comme filtre. De cette façon, nous avons un contrôle total sur le filtrage des données.
Vous pouvez créer vos propres fonctions personnalisées ou utiliser des fonctions PHP existantes.
Spécifiez la fonction du filtre que vous allez utiliser selon la méthode spécifiée de l'option spécifiée. Dans un tableau associatif, portant le nom "options".
Exemple
Dans l'exemple ci-dessous, nous utilisons une fonction personnalisée La fonction convertit tout "_" à "."
<?php header("Content-type:text/html;charset=utf-8"); function convertSpace($string) { return str_replace("_", ".", $string); } $string = "www_php_cn!"; echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace")); ?>
Résultat de l'exécution du programme :
www.php.cn !
Explication des exemples
L'exemple ci-dessus convertit tous les "_" en "." :
1. Créez une fonction qui. remplace "_" par "."
2. Appelez la fonction filter_var(), dont les paramètres sont le filtre FILTER_CALLBACK et le tableau contenant notre fonction