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 <script> 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.