Skip to Content
SécuritéPartie 9 — Sécurité PHP & SymfonyVue d'ensemble

Partie 9 — Sécurité PHP & Symfony

⏱️ TL;DR — On applique maintenant tout le cours à un stack concret : PHP et Symfony. Côté PHP « brut », on revoit les pièges historiques (typage laxiste, comparaisons ==, $_GET/$_REQUEST, extract), puis les vecteurs classiques : uploads de fichiers dangereux, inclusion de fichiers (LFI/RFI), désérialisation d’entrée (unserialize). Côté Symfony, on met en pratique l’authentification (le composant Security, firewalls, authenticators), l’autorisation avec les voters (#[IsGranted]), Doctrine (paramétré) et le CSRF des formulaires, la gestion des secrets (vault, .env), les en-têtes de sécurité, et l’audit des dépendances (composer audit). Symfony fournit d’excellents outils secure by default — encore faut-il ne pas les contourner.

Le problème qu’on résout

PHP traîne une réputation d’insécurité — méritée à l’époque des register_globals et du mysql_query concaténé, beaucoup moins aujourd’hui avec PHP moderne et des frameworks comme Symfony. Mais deux réalités demeurent : (1) le PHP historique est encore très présent (vieux projets, WordPress, scripts) et ses pièges sont bien réels ; (2) même avec Symfony, on peut désactiver ou contourner les protections par méconnaissance. Cette partie fait le tour des deux : les pièges du langage, et comment utiliser Symfony dans le sens de la sécurité.

C’est aussi la partie qui incarne les principes des chapitres précédents (injections, auth, autorisation, CSRF, secrets) dans un framework précis — pour passer de la théorie au code que tu écris vraiment.

Ce que tu sauras faire à la fin de cette partie

  • Éviter les pièges PHP classiques (comparaisons laxistes, superglobales, extract, erreurs affichées).
  • Sécuriser les uploads, comprendre et fermer LFI/RFI et la désérialisation dangereuse.
  • Configurer le composant Security de Symfony : firewalls, authenticators, hachage des mots de passe.
  • Implémenter l’autorisation avec les voters et #[IsGranted] (le contrôle d’accès de la Partie 5, en Symfony).
  • Utiliser Doctrine sans injection, la protection CSRF des formulaires, et poser les en-têtes de sécurité.
  • Gérer les secrets (vault Symfony, .env) et auditer les dépendances (composer audit).

Les chapitres

#ChapitreEn un mot
9.1Pièges PHP classiquesTypage, == vs ===, superglobales, extract, erreurs.
9.2Uploads, LFI & désérialisationFichiers uploadés, inclusion de fichiers, unserialize.
9.3Symfony : firewalls & authComposant Security, firewalls, authenticators, hasher.
9.4Voters & contrôle d’accèsAutorisation par objet, #[IsGranted], denyAccessUnlessGranted.
9.5Doctrine, secrets & auditDoctrine paramétré, CSRF, headers, secrets vault, composer audit.

Après PHP/Symfony, on applique le même travail au versant JavaScript moderne : la Partie 10 — Sécurité Next.js / React / Node.


On commence par le langage lui-même : Pièges PHP classiques.

Last updated on