Qu’est-ce qu’une Content Security Policy (CSP) ?
Une Content Security Policy est un en-tête HTTP qui indique au navigateur quelles ressources une page peut charger. Découvrez comment la CSP bloque les attaques XSS et comment la déployer sans risque.
Une Content Security Policy (CSP) est un en-tête de réponse HTTP qui indique au navigateur depuis quelles sources une page a le droit de charger son contenu : scripts, styles, images, iframes, polices. Toute ressource qui viole la politique est bloquée, et le navigateur peut vous envoyer un rapport de violation.
Pourquoi la CSP est importante
Le cross-site scripting (XSS) reste l’une des vulnérabilités web les plus répandues, et aucune rigueur dans la gestion des entrées ne l’élimine complètement. Une seule faille d’injection suffit pour qu’un attaquant exécute du JavaScript arbitraire dans le navigateur de vos utilisateurs. Une CSP bien construite joue le rôle de seconde ligne de défense. Le code malveillant a beau être injecté dans la page, le navigateur refuse de l’exécuter : sa source n’est pas autorisée par la politique.
Un exemple minimal
Content-Security-Policy: default-src 'self'; script-src 'self' https://js.example.com; object-src 'none'; base-uri 'self'
Concrètement :
- tout se charge par défaut depuis l’origine de la page (
default-src 'self'), - les scripts ne sont autorisés que depuis l’origine et
https://js.example.com, - les plugins sont purement interdits (
object-src 'none'), base-uri 'self'empêche le détournement de la balise<base>, une attaque que tout le monde oublie.
D’abord report-only, ensuite le mode strict
Déployez une politique stricte directement en production et quelque chose cassera. En général un script inline oublié, un widget tiers, ou une extension de navigateur qui fait des siennes. La démarche sûre :
- Déployez la politique avec l’en-tête
Content-Security-Policy-Report-Only. Rien n’est encore bloqué. - Pointez
report-uri/report-tovers un point de collecte des violations. - Analysez les rapports. Corrigez les violations légitimes, filtrez le bruit des extensions.
- Basculez l’en-tête vers
Content-Security-Policypour appliquer la politique.
La vraie difficulté, ce sont les rapports : volumineux et pleins de bruit. C’est pour cela que les équipes passent par une plateforme dédiée comme CentralCSP, qui agrège les rapports, sépare les vrais problèmes du bruit des extensions de navigateur et suit l’évolution de la politique dans le temps.
Les directives clés en un coup d’œil
| Directive | Contrôle |
|---|---|
default-src | Valeur par défaut pour tous les types de ressources |
script-src | Sources JavaScript, scripts inline, eval |
style-src | Feuilles de style et styles inline |
img-src | Images et favicons |
connect-src | Cibles fetch, XHR, WebSocket |
frame-ancestors | Qui peut intégrer cette page (protection contre le clickjacking) |
report-to / report-uri | Destination des rapports de violation |
Pour aller plus loin
Commencez en mode report-only, collectez une semaine de trafic réel, puis itérez. La décision suivante, c’est nonce ou hash, et elle se joue sur votre cache bien plus que sur votre modèle de menace. Si ce que vous protégez est un produit derrière authentification et non un site vitrine, la CSP pour les plateformes SaaS reprend à partir de là. Et si personne dans l’équipe n’a « sécurité » dans son intitulé de poste, tenir une CSP sans ingénieur sécurité dédié est la version écrite pour vous.
Questions fréquentes
Une CSP remplace-t-elle la validation des entrées ?
Non. La CSP est une défense en profondeur. Continuez à valider et échapper les entrées utilisateur. La CSP limite les dégâts le jour où une faille XSS passe quand même entre les mailles du filet.
Activer une CSP peut-il casser mon site ?
Oui, si elle est déployée sans précaution. Commencez en mode Content-Security-Policy-Report-Only, collectez les rapports de violation avec un outil comme CentralCSP, puis passez en mode strict une fois les rapports propres.
Quelle est la différence entre le mode report-only et le mode strict ?
Le mode report-only envoie des rapports de violation sans rien bloquer, ce qui le rend sûr pour les tests. Le mode strict bloque les ressources non autorisées et envoie lui aussi des rapports.