Les filtres
Introduction
Les attaques Cross-Site Scripting (XSS) sont une vulnérabilité de sécurité courante dans les applications web. Elles permettent à un attaquant d'injecter des scripts malveillants dans des pages web. Ces scripts peuvent être utilisés pour voler des informations sensibles, usurper l'identité de l'utilisateur, ou effectuer des actions non autorisées....
Il existe différents types d'attaques XSS. Voici 3 exemples :
- XSS réfléchi (Reflected XSS) : Le script malveillant est injecté dans une requête et renvoyé immédiatement par le serveur dans la réponse.
- XSS stocké (Stored XSS) : Le script malveillant est stocké sur le serveur (par exemple, dans une base de données) et est exécuté lorsque la page est consultée par un utilisateur.
- XSS basé sur le DOM (DOM-based XSS) : Le script malveillant est exécuté en manipulant le Document Object Model (DOM) de la page web, sans interaction directe avec le serveur.
Pour se protéger contre les attaques XSS, il est essentiel de valider et de nettoyer toutes les entrées utilisateur, d'utiliser des en-têtes de sécurité appropriés et de suivre les meilleures pratiques de développement sécurisé.
Filtres de vérification
Les filtres sont utilisés pour valider et filtrer les données provenant de sources non fiables, telles que les entrées utilisateur.
PHP propose une extension de filtrage qui facilite la validation et le filtrage des données.
Exemples :
- filter_var() : Filtre une seule variable avec un filtre spécifique.
- filter_var_array() : Filtre plusieurs variables avec des filtres spécifiques.
Voici quelques exemples d'utilisation des filtres en PHP.
<?php
$email = "test@example.com";
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
$email = "test@example";
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
<?php
$int = "123";
var_dump(filter_var($int, FILTER_VALIDATE_INT));
$int = "1a";
var_dump(filter_var($int, FILTER_VALIDATE_INT));
<?php
$data = [
'email' => 'test@example.com',
'age' => '2a5'
];
$filters = [
'email' => FILTER_VALIDATE_EMAIL,
'age' => [
'filter' => FILTER_VALIDATE_INT,
'options' => ['min_range' => 1, 'max_range' => 120]
]
];
$result = filter_var_array($data, $filters);
var_dump($result);
?>
Les filtres de nettoyage
Les filtres de nettoyage sont utilisés pour nettoyer les données en supprimant ou en encodant les caractères indésirables. PHP propose plusieurs filtres de nettoyage, tels que FILTER_SANITIZE_STRING, FILTER_SANITIZE_EMAIL, FILTER_SANITIZE_URL, etc.
Exemples :
FILTER_SANITIZE_STRING: Supprime ou encode les caractères indésirables d'une chaîne.FILTER_SANITIZE_EMAIL: Supprime tous les caractères sauf les lettres, les chiffres et les caractères !#$%&'*+-/=?^_`{|}~@.[].FILTER_SANITIZE_URL: Supprime tous les caractères sauf les lettres, les chiffres et les caractères ~!$&'()*+,;=:/?@.
Voici quelques exemples d'utilisation des filtres de nettoyage en PHP.
<?php
$string = "<h1>Hello, World!</h1>";
$sanitized_string = filter_var($string, FILTER_SANITIZE_STRING);
echo $sanitized_string; // Affiche "Hello, World!"
?>
<?php
$email = "test@example.com";
$sanitized_email = filter_var($email, FILTER_SANITIZE_EMAIL);
echo $sanitized_email; // Affiche "test@example.com"
$email = "test@<example>.com";
$sanitized_email = filter_var($email, FILTER_SANITIZE_EMAIL);
echo $sanitized_email; // Affiche "test@example.com"
?>