Chapitre 4Projet DevBlog

PHP — Formulaires et données utilisateur

$_GET, $_POST, validation, nettoyage et protection XSS

Concepts Théoriques

Les formulaires sont le moyen principal par lequel les utilisateurs envoient des données à votre serveur : écrire un commentaire, se connecter, publier un article. En PHP, vous récupérez ces données via les superglobales $_GET et $_POST.

GET vs POST

Les deux méthodes pour envoyer des données depuis un formulaire :

  • GET — les données sont dans l'URL (?search=php&page=2). Visible, limité en taille. Pour la recherche, la pagination, les filtres.
  • POST — les données sont dans le corps de la requête. Invisible dans l'URL, pas de limite de taille. Pour les formulaires de création, connexion, inscription.

Règle simple : GET pour lire, POST pour écrire.

Les superglobales

  • $_GET — contient les paramètres de l'URL
  • $_POST — contient les données envoyées en POST
  • $_REQUEST — combine GET et POST (à éviter, moins explicite)
  • $_SERVER — informations sur le serveur et la requête
  • $_FILES — fichiers uploadés (chapitre 12)

Validation et nettoyage — INDISPENSABLE

Ne faites JAMAIS confiance aux données utilisateur. Tout ce qui vient du navigateur peut être falsifié. Validez et nettoyez CHAQUE donnée :

Nettoyage (sanitization) — supprimer les caractères dangereux :

  • trim() — supprimer les espaces en début/fin
  • htmlspecialchars() — échapper le HTML (empêche les attaques XSS)
  • filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL) — nettoyage spécifique

Validation — vérifier que la donnée est correcte :

  • Vérifier que le champ n'est pas vide
  • Vérifier le format (email valide, nombre positif)
  • Vérifier la longueur (min 2, max 255 caractères)
  • filter_var($email, FILTER_VALIDATE_EMAIL) — retourne false si invalide

Protection XSS

L'attaque XSS (Cross-Site Scripting) consiste à injecter du JavaScript malveillant via un formulaire. Si un utilisateur tape <script>alert('hack')</script> dans le champ nom et que vous l'affichez tel quel, le script s'exécute dans le navigateur de tous les visiteurs.

La protection : htmlspecialchars() convertit les chevrons en entités HTML. <script> devient &lt;script&gt; et s'affiche en texte au lieu d'être exécuté.

> Règle d'or : Passez TOUJOURS les données utilisateur dans htmlspecialchars() avant de les afficher dans du HTML. TOUJOURS. Sans exception.