Sécurité et bonnes pratiques
CSRF, XSS, injection SQL, .htaccess et gestion des erreurs
Concepts Théoriques
La sécurité web est une responsabilité. Un site vulnérable met en danger les données de vos utilisateurs. Ce chapitre résume les protections essentielles que tout développeur PHP doit connaître.
Les 3 attaques les plus courantes
1. Injection SQL — Un attaquant injecte du SQL via un formulaire pour lire ou modifier la base de données. Protection : requêtes préparées (chapitre 8). TOUJOURS. Sans exception.
2. XSS (Cross-Site Scripting) — Un attaquant injecte du JavaScript via un formulaire qui s'exécute dans le navigateur des autres visiteurs. Protection : htmlspecialchars() sur TOUTES les données affichées (chapitre 4).
3. CSRF (Cross-Site Request Forgery) — Un attaquant crée un faux formulaire sur un autre site qui soumet des données à votre site en utilisant la session de l'utilisateur connecté. Protection : token CSRF — un jeton unique caché dans chaque formulaire, vérifié côté serveur.
Protection CSRF
Le principe :
- Générer un token aléatoire et le stocker en session
- L'inclure dans chaque formulaire comme champ caché
- À la soumission, vérifier que le token du formulaire correspond à celui de la session
- Si c'est différent ou absent, rejeter la requête
Validation côté serveur — TOUJOURS
La validation JavaScript côté client est un confort UX. La validation PHP côté serveur est la sécurité. Un utilisateur peut désactiver JavaScript, modifier le HTML avec les DevTools, ou envoyer des requêtes directement avec curl/Postman.
Validez TOUJOURS côté serveur :
- Les champs obligatoires ne sont pas vides
- Les formats sont corrects (email, nombre, date)
- Les longueurs sont respectées (min/max)
- Les valeurs sont dans les plages autorisées
- Les fichiers uploadés sont du bon type
Gestion des erreurs
En développement : affichez toutes les erreurs (ini_set('display_errors', 1)). En production : loggez les erreurs dans un fichier, affichez un message générique à l'utilisateur. Ne montrez JAMAIS une stack trace en production — elle expose la structure de votre code.
Le fichier .htaccess
Le .htaccess configure Apache pour votre projet :
- Rediriger toutes les requêtes vers index.php (pour le routeur)
- Bloquer l'accès direct aux fichiers sensibles (config/, models/)
- Forcer HTTPS
- Activer la compression gzip
> Règle d'or : Ne faites JAMAIS confiance aux données qui viennent du navigateur — GET, POST, COOKIE, fichiers. Tout doit être validé et nettoyé côté serveur.