Tutoriel de bas...LOGIN

Tutoriel de base sur le développement PHP - filtre

1. Qu'est-ce qu'un 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.

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.


2. 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 de saisie des formulaires

  • Cookies

  • Données des services Web

  • Variables du serveur

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


3. 🎜>

Pour filtrer une variable, utilisez l'une des fonctions de filtre suivantes :

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

filter_var_array() - Filtrer plusieurs variables avec des filtres identiques ou différents

filter_input - Obtenez une variable d'entrée et filtrez-la

filter_input_array - prend plusieurs variables d'entrée et les filtre par des filtres identiques ou différents

ci-dessous Dans l'exemple, nous utilisons la fonction filter_var() pour vérifier un entier : le code est le suivant suit

<?php
$int = 12443633;
//验证一个数是不是整数
if(!filter_var($int, FILTER_VALIDATE_INT))
{
	echo("不是一个合法的整数");
}
else
{
	echo("是个合法的整数");
}
?>

La sortie est affichée dans l'image de droite

Remarque : vous pouvez essayer d'autres variables pour observer les résultats de sortie


4. Validation et désinfection

Il existe deux types de filtre de filtrage :

Filtre de validation :

  • Utilisé pour valider la saisie de l'utilisateur

  • Règles de formatage strictes (telles que la vérification d'URL ou d'e-mail)

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

Filtre de désinfection :

  • Utilisé pour autoriser ou interdire les caractères spécifiés dans une chaîne

  • Aucune règle de format de données

  • Renvoie toujours une chaîne


5. Options et drapeaux

Les options et les drapeaux sont utilisés pour ajouter des options de filtrage supplémentaires.

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

Dans l'exemple ci-dessous, on valide un entier en utilisant filter_var() avec les options "min_range" et "max_range" :

Le code est le suivant

<?php
$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 placées 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 consulter le manuel PHP


6. Validez la saisie

Allons essayez 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("没有 email 参数");
}
else
{
	if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
	{
		echo "不是一个合法的 E-Mail";
	}
	else
	{
		echo "是一个合法的 E-Mail";
	}
}
?>

L'exemple ci-dessus a une variable d'entrée (email) passée via la méthode « GET » :

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

  • S'il existe une variable d'entrée, vérifiez s'il s'agit d'une adresse e-mail valide


7. Purifier l'entrée

Essayons de nettoyer l'URL passé du 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_GET, "url"))
{
	echo("没有 url 参数");
}
else
{
	$url = filter_input(INPUT_GET, 
	"url", FILTER_SANITIZE_URL);
	echo $url;
}
?>

Explication de l'exemple :

Ce qui précède exemple a une variable d'entrée (url) transmise via la méthode "GET":

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

Si cette variable d'entrée existe, nettoyer (supprimez-le) Caractères illégaux) et stockez-le dans la variable $url


8. Filtrez plusieurs entrées

Le formulaire se compose 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.

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 :

L'exemple est le suivant

<?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("年龄必须在 1 到 120 之间。<br>");
}
elseif(!$result["email"])
{
	echo("E-Mail 不合法<br>");
}
else
{
	echo("输入正确");
}
?>

Explication de l'exemple

Le exemple ci-dessus Il y a trois variables d'entrée (nom, âge et email) transmises via la méthode "GET":

  • Définit un tableau contenant le nom de la variable d'entrée et le nom de l'entrée variable pour le filtre spécifié

  • appelle la fonction filter_input_array(), les paramètres incluent la variable d'entrée GET et le tableau vient de être défini

  • Détecte " age dans la variable $result " et les variables "email" ont une entrée illégale. (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 paramètre 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 contenant les variables d'entrée qui sont les clés du tableau (comme l'"âge " variable d'entrée )

La valeur de ce tableau doit être l'ID du filtre, ou un tableau spécifiant des filtres, des drapeaux et des options


9. Utiliser Rappel de filtre

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".

Dans l'exemple ci-dessous, nous utilisons une fonction personnalisée pour convertir tous les "_" en espaces :

<?php
function convertSpace($string)
{
	return str_replace("_", ".", $string);
}

$string = "www_php_cn!";

echo filter_var($string, FILTER_CALLBACK,
array("options"=>"convertSpace"));
?>

Le résultat de sortie est affiché à droite

Exemple explication

L'exemple ci-dessus convertit tous les "_" en "." :

  • Créez une fonction qui remplace "_" par "."

  • Appelez la fonction filter_var(), ses paramètres sont le filtre FILTER_CALLBACK et le tableau contenant notre fonction

  • section suivante
<?php $int = 12443633; //验证一个数是不是整数 if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("不是一个合法的整数"); } else { echo("是个合法的整数"); } ?>
soumettreRéinitialiser le code
chapitredidacticiel