Validation et filtrage des entrées
Notions théoriques
Pourquoi valider et filtrer les entrées ?
Lorsqu'un utilisateur saisit des données dans un formulaire ou envoie des informations à un programme, ces données ne sont pas forcément fiables. Elles peuvent être incorrectes, malveillantes ou simplement mal formatées.
Ne pas valider et filtrer les entrées peut entraîner :
- Des erreurs de fonctionnement du programme
- Des failles de sécurité (injections SQL, XSS, exécution de code malveillant)
- Des incohérences dans les données stockées
Différence entre validation et filtrage
-
Validation : Vérifie si une donnée respecte un format précis
Exemple : une adresse e-mail doit contenir
@
et un domaine valide. -
Filtrage : Nettoie la donnée pour supprimer les caractères indésirables ou dangereux
Exemple : suppression des balises HTML dans un champ texte.
Techniques de validation des entrées
-
Validation côté client (JavaScript) :
- Rapide, mais contournable par un utilisateur malveillant
- Utile pour améliorer l'expérience utilisateur (exemple : vérifier un champ avant soumission)
-
Validation côté serveur (PHP, Python, etc.) :
- Obligatoire pour garantir la sécurité
- Vérifie et filtre les données avant traitement ou stockage
Exemples de validation
- Vérification de la longueur d’un texte (
min
etmax
caractères). - Vérification d’un format spécifique (expression régulière pour une adresse e-mail).
- Vérification d’une valeur numérique (exemple : un âge doit être un nombre entre 0 et 120).
Exemples de filtrage
- Suppression des espaces inutiles (
trim()
en PHP). - Échappement des caractères spéciaux (
htmlspecialchars()
pour éviter les attaques XSS). - Filtrage des entrées pour éviter les injections SQL (
mysqli_real_escape_string()
).
Exemple pratique
Il est possible de valider et filtrer une adresse e-mail en PHP avant de l’enregistrer dans une base de données.
Code PHP pour valider et filtrer une adresse e-mail
<?php
function verifier_email($email) {
// Supprimer les espaces inutiles
$email = trim($email);
// Vérifier si l'adresse est bien formée
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
return "Adresse e-mail invalide.";
}
// Échapper les caractères spéciaux pour éviter les injections SQL
$email_securise = htmlspecialchars($email, ENT_QUOTES, 'UTF-8');
return "Adresse valide et sécurisée : " . $email_securise;
}
// Exemple d'utilisation
$utilisateur_email = " <script>alert('XSS')</script>test@example.com ";
echo verifier_email($utilisateur_email);
?>
Explication du code
trim($email)
: Supprime les espaces en début et fin de chaîne.filter_var($email, FILTER_VALIDATE_EMAIL)
: Vérifie si l’adresse e-mail est valide.htmlspecialchars($email, ENT_QUOTES, 'UTF-8')
: Convertit les caractères spéciaux pour éviter les attaques XSS.- Retourne l’e-mail sécurisé si valide, sinon affiche une erreur.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Objectif du TP
Ce TP consiste à créer un formulaire HTML permettant à un utilisateur de saisir son adresse e-mail.
L’entrée sera ensuite traitée par un script PHP qui effectuera les étapes suivantes :
- Récupérer l’e-mail soumis par l’utilisateur.
- Valider que l’e-mail est bien formé.
- Filtrer l’e-mail pour éviter les injections XSS.
- Enregistrer l’e-mail validé et sécurisé dans un fichier.
- Afficher un message de confirmation ou une erreur en fonction de l’entrée.
Étape 1 : Créer un formulaire HTML
Un formulaire est nécessaire pour permettre à l’utilisateur de saisir son e-mail.
- Créer un fichier
index.html
. - Ajouter un formulaire avec :
- Un champ texte pour l’adresse e-mail.
- Un bouton pour envoyer le formulaire.
- Une méthode
POST
pour transmettre les données de manière sécurisée.
Code du formulaire HTML :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Validation d'e-mail</title>
</head>
<body>
<h2>Inscription</h2>
<form action="process.php" method="POST">
<label for="email">Adresse e-mail :</label>
<input type="text" id="email" name="email" required>
<button type="submit">Envoyer</button>
</form>
</body>
</html>
Une solution
Vous devez être connecté pour voir le contenu.
Étape 2 : Récupérer et valider l'e-mail en PHP
Le formulaire envoie les données à process.php
, qui doit récupérer et valider l’e-mail.
- Créer un fichier
process.php
. - Vérifier que la requête est bien envoyée via
POST
. - Récupérer l’e-mail soumis et supprimer les espaces inutiles.
- Vérifier si l’e-mail est valide avec
filter_var()
. - Afficher un message d’erreur si l’e-mail est invalide.
Code PHP pour récupérer et valider l’e-mail :
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$email = trim($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
die("Erreur : Adresse e-mail invalide.");
}
echo "Adresse e-mail valide.";
}
?>
Une solution
Vous devez être connecté pour voir le contenu.
Étape 3 : Sécuriser l’e-mail contre les attaques XSS
Une fois l’e-mail validé, il faut le sécuriser pour éviter les attaques XSS.
- Convertir les caractères spéciaux en entités HTML avec
htmlspecialchars()
. - Afficher l’e-mail sécurisé pour vérifier qu’il ne contient pas de code malveillant.
Code PHP pour sécuriser l’e-mail :
$email_securise = htmlspecialchars($email, ENT_QUOTES, 'UTF-8');
echo "Adresse e-mail sécurisée : " . $email_securise;
Une solution
Vous devez être connecté pour voir le contenu.
Étape 4 : Enregistrer l’e-mail validé dans un fichier
L’e-mail validé et sécurisé doit être stocké dans un fichier emails.txt
.
- Ouvrir le fichier
emails.txt
en mode ajout (a
). - Écrire l’e-mail sécurisé dans le fichier.
- Ajouter un saut de ligne après chaque e-mail.
- Afficher un message confirmant l’enregistrement.
Code PHP pour enregistrer l’e-mail :
$file = fopen("emails.txt", "a");
fwrite($file, $email_securise . PHP_EOL);
fclose($file);
echo "Adresse e-mail enregistrée avec succès.";
Une solution
Vous devez être connecté pour voir le contenu.
Étape 5 : Vérifier le fichier de stockage
- Ouvrir le fichier
emails.txt
avec un éditeur de texte. - Vérifier que les e-mails enregistrés sont bien formatés et sécurisés.
- Tester avec plusieurs e-mails valides et invalides pour observer le comportement du script.
Une solution
Vous devez être connecté pour voir le contenu.
Étape 6 : Tester le script avec différents scénarios
- Saisir une adresse e-mail correcte (
exemple@test.com
).- Résultat attendu : "Adresse e-mail enregistrée avec succès."
- Saisir une adresse e-mail incorrecte (
exemple@.com
).- Résultat attendu : "Erreur : Adresse e-mail invalide."
- Saisir une tentative d’injection XSS (
<script>alert('XSS')</script>@test.com
).- Résultat attendu : L’e-mail est sécurisé et affiché sans exécuter le script.
Une solution
Vous devez être connecté pour voir le contenu.