Filtres (Filter) PHP
- Page précédente Exception PHP
- Page suivante Introduction MySQL
Les filtres PHP sont utilisés pour valider et filtrer les données provenant de sources non sécurisées, comme les entrées des utilisateurs.
Qu'est-ce que 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 des utilisateurs ou des données personnalisées sont des composants importants de toute application web.
Le but de l'extension de filtre de PHP est de rendre le filtrage des données plus facile et plus rapide.
Pourquoi utiliser des filtres ?
Presque toutes les applications web dépendent des entrées externes. Ces données viennent généralement des utilisateurs ou d'autres applications (comme les services web). En utilisant des filtres, vous pouvez vous assurer que l'application reçoit le type d'entrée correct.
Vous devriez toujours filtrer les données externes !
Le filtrage des entrées est l'un des sujets d'importance cruciale en matière de sécurité des applications.
Qu'est-ce que les données externes ?
- Données d'entrée provenant du formulaire
- Cookies
- Variables du serveur
- Résultat 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() - Filtrer une variable unique à l'aide d'un filtre spécifié
- filter_var_array() - Filtrer plusieurs variables à l'aide du même ou d'un autre filtre
- filter_input - Obtenir une variable d'entrée et la filtrer
- filter_input_array - Obtenir plusieurs variables d'entrée et les filtrer à l'aide du même ou d'un autre filtre
Dans l'exemple suivant, nous avons vérifié un entier en utilisant 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 la variable. Comme cet entier est valide, la sortie du code est : "Integer is valid".
Si nous essayons d'utiliser une variable non entière, la sortie est : "Integer is not valid".
Pour une liste complète des fonctions et des filtres, veuillez consulter notre Manuel de référence des filtres PHP.
Validation et nettoyage
Il y a deux types de filtres :
Filtres de validation :
- Utilisé pour valider les entrées utilisateur
- Règles de format strictes (par exemple, validation d'URL ou d'e-mail)
- Retourne le type attendu si succès, FALSE si échoue
Filtre de nettoyage :
- Utilisé pour autoriser ou interdire des caractères spécifiques dans une chaîne
- Pas de règle de format de données
- Retourne toujours une chaîne
Options et indicateurs
Les 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.
Dans l'exemple suivant, nous avons vérifié un entier en utilisant filter_var() et 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, les options doivent être placées dans un tableau nommé "options". Si vous utilisez des indicateurs, vous n'avez pas besoin de les inclure dans le tableau.
Comme l'entier est "300", il n'est pas dans la plage spécifiée, la sortie du code sera "L'entier n'est pas valide".
Pour une liste complète des fonctions et des filtres, veuillez consulter le site CodeW3C.com fourni Manuel de référence des filtres PHPVous pouvez voir les options et les indicateurs disponibles pour chaque filtre.
Valider les entrées
Essayons de valider les entrées provenant du formulaire.
La première chose que nous devons faire est de nous assurer que les données d'entrée que nous cherchons 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 transmise à la page PHP :
<?php if(!filter_has_var(INPUT_GET, "email")) { echo("Type d'entrée non existant"); } else { if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo "L'e-mail n'est pas valide"; } else { echo "L'e-mail est valide"; } } ?>
Explication de l'exemple :
Dans l'exemple suivant, une variable d'entrée (email) est transmise par la méthode "GET":
- Vérifier l'existence de la variable d'entrée de type "GET" pour "email"
- Si une variable d'entrée existe, vérifier si elle est une adresse e-mail valide
Nettoyer les entrées
Essayons de nettoyer l'URL transmise par le formulaire.
Tout d'abord, nous devons nous assurer que les données d'entrée que nous cherchons existent.
Ensuite, nous utilisons la fonction filter_input() pour nettoyer les données d'entrée.
Dans l'exemple suivant, la variable d'entrée "url" est transmise à la page PHP :
<?php if(!filter_has_var(INPUT_POST, "url")) { echo("Type d'entrée non existant"); } else { $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL); } ?>
Explication de l'exemple :
Dans l'exemple suivant, il y a une variable d'entrée (url) transmise par la méthode "POST":
- Vérifier l'existence de la variable d'entrée de type "POST" pour "url"
- Si cette variable d'entrée existe, la nettoyer (supprimer les caractères non valides) et l'enregistrer dans la variable $url
Si la variable d'entrée ressemble à ceci: "http://www.W3非o法ol.com.c字符n/", alors la variable $url nettoyée devrait être ainsi:
http://www.codew3c.com/
Filtrer plusieurs entrées
Un formulaire est généralement composé de plusieurs champs d'entrée. Pour éviter de répéter l'appel à filter_var ou filter_input, nous pouvons utiliser filter_var_array ou 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 e-mail :
<?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("L'âge doit être un nombre entre 1 et 120.<br />"); } elseif (!$result["email"]) { echo("L'adresse e-mail n'est pas valide.<br />"); } else { echo("L'entrée utilisateur est valide"); } ?>
Explication de l'exemple :
Dans cet exemple, il y a trois variables d'entrée transmises par la méthode "GET" (name, age et email)
- Définissez un array qui contient le nom des variables d'entrée et les filtres utilisés pour les variables d'entrée spécifiées
- Appellez la fonction filter_input_array, les paramètres incluent les variables d'entrée GET et l'array récemment défini
- Vérifiez si les variables "age" et "email" du variable $result ont des entrées illégales. (S'il y a des entrées illégales,)
Le deuxième paramètre de la fonction filter_input_array() peut être un tableau ou un ID de filtre unique.
Si le paramètre est l'ID d'un filtre unique, alors ce filtre spécifié filtrera toutes les valeurs de l'array d'entrée.
Si le paramètre est un tableau, alors cet tableau doit suivre les règles suivantes :
- Doit être un tableau associatif, contenant des variables d'entrée comme des clés de tableau (par exemple, "age" en tant que variable d'entrée)
- La valeur de cet tableau doit être l'ID du filtre, ou un tableau qui définit le filtre, les drapeaux et les options
Utilisation de Filter Callback
En utilisant le filtre FILTER_CALLBACK, vous pouvez appeler une fonction personnalisée et l'utiliser comme filtre. De cette manière, nous avons un contrôle complet sur le filtrage des données.
Vous pouvez créer vos propres fonctions personnalisées ou utiliser des fonctions PHP existantes.
Définissez la méthode que vous prévoyez d'utiliser pour les fonctions de filtre de la même manière que pour les options.
Dans l'exemple suivant, nous utilisons une fonction personnalisée pour convertir tous les "_" en espaces :
<?php function convertSpace($string) { return str_replace("_", " ", $string); } $string = "Peter_is_a_great_guy!"; echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace")); ?>
Le résultat du code ci-dessus est le suivant :
Peter est un excellent homme !
Explication de l'exemple :
L'exemple ci-dessus convertit tous les "_" en espaces :
- Créer une fonction qui remplace "_" par un espace
- Appeler la fonction filter_var(), dont les paramètres sont le filtre FILTER_CALLBACK et un tableau contenant nos fonctions
- Page précédente Exception PHP
- Page suivante Introduction MySQL