Tutoriel
Partie 13 — Sécurité des données : validation, filtrage, bonnes pratiques

Partie 13 — Sécurité des données : validation, filtrage, bonnes pratiques

Apprenez à sécuriser les données en PHP : validation des formulaires, filtrage, protection XSS et bonnes pratiques. Tutoriel complet optimisé SEO et Google AdSense.

PHP 51 Mis à jour 11 hours ago
Conseil : lisez d’abord les sections clés, puis essayez un QCM lié à la même notion pour valider votre compréhension.

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

  1. Valider un champ email
  2. Nettoyer un message utilisateur
  3. Bloquer un ID invalide en GET
  4. 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.