Partie 13 — Sécurité des données : validation, filtrage, bonnes pratiques
Dans les parties précédentes, vous avez appris à créer des formulaires et à récupérer des données utilisateur. Mais récupérer des données n’est jamais suffisant.
Un développeur PHP professionnel se pose toujours la question suivante :
👉 « Puis-je faire confiance à ces données ? »
La réponse est simple : non.
Toutes les données provenant :
- D’un formulaire
- D’une URL (GET)
- D’un cookie
- D’une session
doivent être contrôlées, nettoyées et sécurisées.
Dans cette partie, vous allez apprendre :
- Les risques liés aux données utilisateur
- La différence entre validation et filtrage
- Comment sécuriser les formulaires PHP
- Prévenir les failles XSS et injections
- Les bonnes pratiques utilisées en production
1. Pourquoi la sécurité des données est cruciale
Un site vulnérable peut être :
- Piraté
- Défiguré
- Utilisé pour voler des données
- Banni par les moteurs de recherche
Même un petit site personnel peut être ciblé automatiquement.
Les attaques ne sont pas toujours manuelles. Elles sont souvent réalisées par des robots.
👉 La sécurité n’est pas optionnelle.
2. Validation vs Filtrage : comprendre la différence
Ces deux notions sont souvent confondues, mais elles sont très différentes.
Validation
La validation consiste à vérifier que la donnée respecte des règles précises.
- Champ obligatoire
- Format correct
- Longueur minimale ou maximale
Filtrage
Le filtrage consiste à nettoyer ou transformer une donnée.
- Supprimer des caractères dangereux
- Échapper le HTML
- Nettoyer les espaces
👉 Bonne pratique : valider puis filtrer
3. Validation des champs obligatoires
La première étape de sécurité est de vérifier que les champs nécessaires sont bien remplis.
Exemple simple
<?php
if (empty($_POST["nom"])) {
echo "Le nom est obligatoire";
}
?>
👉 empty() vérifie
si la valeur est vide ou inexistante.
4. Validation du format des données
Certains champs doivent respecter un format précis.
Validation d’un email
<?php
$email = $_POST["email"];
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Email invalide";
}
?>
👉 Utilise toujours les filtres PHP intégrés.
Validation de longueur
<?php
if (strlen($_POST["message"]) < 10) {
echo "Message trop court";
}
?>
5. Filtrage des données : nettoyer le texte
Après validation, les données doivent être nettoyées.
trim() — supprimer les espaces
$nom = trim($_POST["nom"]);
htmlspecialchars() — protection XSS
$nom = htmlspecialchars($nom, ENT_QUOTES, 'UTF-8');
👉 Fonction indispensable avant tout affichage HTML.
6. Comprendre les attaques XSS (Cross-Site Scripting)
Une attaque XSS consiste à injecter du code JavaScript malveillant dans une page web.
Exemple dangereux
<script>alert('piraté')</script>
Si ce code est affiché sans protection, il sera exécuté par le navigateur.
👉 htmlspecialchars() neutralise ce risque
7. Sécuriser les données GET
Les données envoyées par GET sont visibles dans l’URL.
Elles sont très faciles à modifier.
Exemple sécurisé
<?php
$id = filter_input(INPUT_GET, "id", FILTER_VALIDATE_INT);
if ($id === false) {
echo "ID invalide";
}
?>
8. Sécuriser les données POST
POST est plus discret que GET, mais pas plus fiable.
Exemple propre
<?php $nom = filter_input(INPUT_POST, "nom", FILTER_SANITIZE_SPECIAL_CHARS); ?>
👉 Toujours vérifier l’existence et la validité des champs.
9. Bonnes pratiques générales de sécurité
- Ne jamais faire confiance à l’utilisateur
- Valider toutes les entrées
- Filtrer avant affichage
- Utiliser les fonctions PHP natives
- Afficher des messages d’erreur génériques
10. Cas réel : formulaire sécurisé complet
<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$nom = trim($_POST["nom"]);
$email = trim($_POST["email"]);
if (empty($nom) || empty($email)) {
echo "Tous les champs sont obligatoires";
exit;
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Email invalide";
exit;
}
$nom = htmlspecialchars($nom, ENT_QUOTES, 'UTF-8');
$email = htmlspecialchars($email, ENT_QUOTES, 'UTF-8');
echo "Données sécurisées reçues";
}
?>
11. Erreurs fréquentes des débutants
- Faire confiance aux données POST
- Afficher les données sans filtrage
- Ne pas valider les formats
- Utiliser des fonctions obsolètes
12. Mini-exercices pratiques
- Valider un champ email
- Nettoyer un message utilisateur
- Bloquer un ID invalide en GET
- Créer un formulaire sécurisé simple
Conclusion
La sécurité des données est une responsabilité du développeur.
En appliquant :
- Validation
- Filtrage
- Bonnes pratiques
Vous protégez :
- Vos utilisateurs
- Votre site
- Votre réputation
Dans la prochaine partie, nous verrons comment gérer l’état utilisateur avec les sessions et cookies.