Dans cet article, nous verrons pourquoi il est si important de filtrer tout ce qui est incorporé dans nos applications. En particulier, nous verrons comment valider et assainir les données étrangères en PHP.
Ne faites jamais (jamais !) confiance aux contributions étrangères dans votre application. C’est l’une des leçons les plus importantes à apprendre pour quiconque développe une application Web.
L’apport étranger peut être n’importe quoi – de $_GET
et $_POST
les données d’entrée du formulaire, certains éléments du corps de la requête HTTP ou même certaines valeurs du $_SERVER
superglobal. Les cookies, les valeurs de session et les fichiers de documents chargés et téléchargés sont également considérés comme des entrées étrangères.
Chaque fois que nous traitons, produisons, incluons ou concaténons des données étrangères dans notre code, il existe un vecteur potentiel pour que les attaquants injectent du code dans notre application (le soi-disant attaques par injection). Pour cette raison, nous devons nous assurer que chaque élément de données étrangères est correctement filtré afin qu’il puisse être intégré en toute sécurité dans l’application.
En ce qui concerne le filtrage, il existe deux types principaux : validation et assainissement.
Validation
Validation garantit que l’apport étranger est ce que nous attendons qu’il soit. Par exemple, nous pourrions nous attendre à une adresse e-mail, donc nous attendons quelque chose avec le ********@*****.***
format. Pour cela, nous pouvons utiliser le FILTER_VALIDATE_EMAIL
filtre. Ou, si nous attendons un booléen, nous pouvons utiliser PHP FILTER_VALIDATE_BOOL
filtre.
Parmi les filtres les plus utiles figurent FILTER_VALIDATE_BOOL
, FILTER_VALIDATE_INT
et FILTER_VALIDATE_FLOAT
pour filtrer les types de base et les FILTER_VALIDATE_EMAIL
et FILTER_VALIDATE_DOMAIN
pour filtrer respectivement les e-mails et les noms de domaine.
Un autre filtre très important est le FILTER_VALIDATE_REGEXP
qui nous permet de filtrer par rapport à une expression régulière. Avec ce filtre, nous pouvons créer nos filtres personnalisés en modifiant l’expression régulière par rapport à laquelle nous filtrons.
Tous les filtres disponibles pour la validation en PHP peuvent être trouvés ici.
Assainissement
Assainissement est le processus de suppression des caractères illégaux ou dangereux de l’entrée étrangère.
Le meilleur exemple de cela est lorsque nous nettoyons les entrées de la base de données avant de les insérer dans une requête SQL brute.
Encore une fois, certains des filtres de désinfection les plus utiles incluent ceux à désinfecter pour les types de base comme FILTER_SANITIZE_STRING
, FILTER_SANITIZE_CHARS
et FILTER_SANITIZE_INT
mais aussi FILTER_SANITIZE_URL
et FILTER_SANITIZE_EMAIL
pour nettoyer les URL et les e-mails.
Tous les filtres de nettoyage PHP peuvent être trouvés ici.
filter_var() et filter_input()
Maintenant que nous savons que PHP dispose d’une sélection complète de filtres, nous devons savoir comment les utiliser.
L’application du filtre se fait via le filter_var()
et filter_input()
les fonctions.
Le filter_var()
La fonction applique un filtre spécifié à une variable. Il prendra la valeur à filtrer, le filtre à appliquer et un tableau optionnel d’options. Par exemple, si nous essayons de valider une adresse e-mail, nous pouvons utiliser ceci :
<?php
$email = your.email@sitepoint.com:
if ( filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
echo ("This email is valid");
}
Si le but était de nettoyer une chaîne, nous pourrions utiliser ceci :
<?php
$string = "<h1>Hello World</h1>";
$sanitized_string = filter_var ( $string, FILTER_SANITIZE_STRING);
echo $sanitized_string;
Le filter_input()
La fonction obtient une entrée étrangère à partir d’une entrée de formulaire et la filtre.
Cela fonctionne exactement comme le filter_var()
fonction, mais il faut un type d’entrée (on peut choisir parmi GET
, POST
, COOKIE
, SERVER
ou ENV
), la variable à filtrer et le filtre. En option, il peut également prendre un tableau d’options.
Encore une fois, si nous voulons vérifier si la variable d’entrée externe « email » est envoyée via GET
à notre application, nous pouvons utiliser ceci:
<?php
if ( filter_input( INPUT_GET, "email", FILTER_VALIDATE_EMAIL ) ) {
echo "The email is being sent and is valid.";
}
Conclusion
Et ce sont les bases du filtrage de données en PHP. D’autres techniques peuvent être utilisées pour filtrer les données étrangères, comme appliquer une expression régulièremais les techniques que nous avons vues dans cet article sont plus que suffisantes pour la plupart des cas d’utilisation.
Assurez-vous de bien comprendre la différence entre la validation et le nettoyage et comment utiliser les fonctions de filtrage. Avec ces connaissances, vos applications PHP seront plus fiables et sécurisées !
Source link