PHP 8.4 Essentials
Thème :
Junior
5 vues ·18/23 leçonsValidation & Assainissement des Entrées
Ne faites jamais confiance aux données saisies par l’utilisateur ! Validez et assainissez toujours les données avant de les utiliser.
Validation vs Assainissement
- Validation : Vérifier si les données respectent les exigences (rejeter si invalide).
- Assainissement (Sanitization) : Nettoyer/modifier les données pour les rendre sûres.
Fonctions de Filtre PHP
<?php
// Valider - retourne false si invalide
$email = filter_var($input, FILTER_VALIDATE_EMAIL);
$url = filter_var($input, FILTER_VALIDATE_URL);
$entier = filter_var($input, FILTER_VALIDATE_INT);
$float = filter_var($input, FILTER_VALIDATE_FLOAT);
$bool = filter_var($input, FILTER_VALIDATE_BOOL);
// Avec des options
$age = filter_var($input, FILTER_VALIDATE_INT, [
'options' => ['min_range' => 1, 'max_range' => 120]
]);
Filtres d’Assainissement
<?php
// Assainir - nettoie les données
$email = filter_var($input, FILTER_SANITIZE_EMAIL);
$chaine = filter_var($input, FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$entier = filter_var($input, FILTER_SANITIZE_NUMBER_INT);
$url = filter_var($input, FILTER_SANITIZE_URL);
Filtrer les Superglobales Directement
<?php
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);
Prévenir les Failles XSS (Cross-Site Scripting)
<?php
$saisieUtilisateur = '<script>alert("XSS")</script>';
// DANGEREUX :
echo $saisieUtilisateur; // Exécute le JavaScript !
// SÉCURISÉ :
echo htmlspecialchars($saisieUtilisateur, ENT_QUOTES, 'UTF-8');
// Affiche: <script>alert("XSS")</script>
Modèles de Validation Courants
<?php
function validerFormulaire(array $data): array {
$erreurs = [];
// Champ requis
if (empty($data['nom'])) {
$erreurs['nom'] = 'Le nom est requis';
} elseif (strlen($data['nom']) < 2) {
$erreurs['nom'] = 'Le nom doit contenir au moins 2 caractères';
}
// Validation d'email
if (!filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
$erreurs['email'] = 'Adresse email invalide';
}
// Robustesse du mot de passe
if (strlen($data['motdepasse']) < 8) {
$erreurs['motdepasse'] = 'Le mot de passe doit contenir au moins 8 caractères';
}
// Plage numérique
$age = filter_var($data['age'], FILTER_VALIDATE_INT);
if ($age === false || $age < 18 || $age > 120) {
$erreurs['age'] = "L'âge doit être compris entre 18 et 120";
}
return $erreurs;
}
Validation par Liste Blanche
<?php
$couleurs_autorisees = ['rouge', 'vert', 'bleu'];
$couleur = $_POST['couleur'] ?? '';
if (!in_array($couleur, $couleurs_autorisees, true)) {
$erreur = 'Couleur invalide sélectionnée';
}
Exemples de code
Classe de validation fluide pour les formulaires
<?php
class Validateur {
private array $erreurs = [];
public function requis(string $champ, mixed $valeur): self {
if (empty(trim($valeur))) {
$this->erreurs[$champ] = ucfirst($champ) . ' est requis';
}
return $this;
}
public function email(string $champ, string $valeur): self {
if (!filter_var($valeur, FILTER_VALIDATE_EMAIL)) {
$this->erreurs[$champ] = 'Format email invalide';
}
return $this;
}
public function longueurMin(string $champ, string $valeur, int $min): self {
if (strlen($valeur) < $min) {
$this->erreurs[$champ] = "$champ doit faire au moins $min caractères";
}
return $this;
}
public function estValide(): bool {
return empty($this->erreurs);
}
public function getErreurs(): array {
return $this->erreurs;
}
}
// Utilisation
$validateur = new Validateur();
$validateur
->requis('nom', $_POST['nom'] ?? '')
->email('email', $_POST['email'] ?? '')
->longueurMin('motdepasse', $_POST['motdepasse'] ?? '', 8);
if ($validateur->estValide()) {
// Traiter le formulaire
} else {
$erreurs = $validateur->getErreurs();
}
?>
Ressources
- Extension Filtre PHP — Documentation de l’extension PHP Filter
- Types de Filtres — Filtres disponibles et leurs options
📘 Cette leçon fait partie du cours PHP Essentials sur la plateforme d’apprentissage RostoDev.
Prêt à passer à la suite ?
Vous avez terminé cette leçon sur Validation & Assainissement des Entrées. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.