Content Security Policy (CSP), la référence complète
Fonctionnement de CSP, ses headers, les valeurs placées dans une directive, et chaque directive, avec le reporting de bout en bout.
Dernière mise à jour:
La Content Security Policy (CSP) est un header de réponse HTTP qui indique au navigateur quelles ressources une page a le droit de charger et d'exécuter. C'est le navigateur qui l'applique : un script, une feuille de style, une image, une frame ou une connexion qu'aucune directive n'autorise est bloqué avant de s'exécuter. C'est ce qui fait de CSP la principale défense contre le cross-site scripting (XSS) et l'injection de contenu, et la raison pour laquelle c'est le seul contrôle qui arrête un script injecté même quand l'injection, elle, a réussi.
Une politique est une liste de directives séparées par des points-virgules, chacune nommant un type de ressource et les sources autorisées pour ce type :
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-r4nd0m'; object-src 'none'; base-uri 'none'CSP peut aussi signaler au lieu de bloquer. Content-Security-Policy-Report-Only porte la
même politique, n'applique rien, et envoie un
report csp-violation pour tout
ce qu'elle aurait bloqué. Vous mesurez donc une politique sur du trafic réel avant de
l'activer.
Les éléments d'une politique
| Élément | Ce que c'est | Référence |
|---|---|---|
| Header | Content-Security-Policy applique, -Report-Only se contente de signaler. Un élément <meta> peut aussi porter une politique, avec des limites. | Headers |
| Directive | Le type de ressource concerné : script-src, img-src, frame-ancestors. | Directives |
| Liste de sources | Les valeurs après une directive : keywords, hosts, schemes, hashes, nonces. | Valeurs |
| Repli | La plupart des directives de fetch se replient sur default-src quand elles sont absentes. | default-src |
| Reporting | report-to (et l'ancien report-uri) désignent où sont envoyées les violations. | report-to |
Les directives par rôle
Chaque directive a sa page. Groupées par ce qu'elles gouvernent :
| Rôle | Directives |
|---|---|
| Fetch | default-src, script-src, script-src-elem, script-src-attr, style-src, style-src-elem, style-src-attr, img-src, font-src, media-src, object-src, connect-src, manifest-src, frame-src, child-src, worker-src, fenced-frame-src |
| Document | base-uri, sandbox |
| Navigation | form-action, frame-ancestors |
| Reporting | report-to, report-uri |
| Trusted Types | require-trusted-types-for, trusted-types |
| Autres | upgrade-insecure-requests, webrtc |
| Dépréciées ou supprimées | block-all-mixed-content, plugin-types, prefetch-src, navigate-to, referrer, require-sri-for |
Une politique à copier
Content-Security-Policy:
default-src 'self';
script-src 'self' 'nonce-{ALEATOIRE}';
style-src 'self' 'unsafe-inline';
img-src 'self' data:;
connect-src 'self';
object-src 'none';
base-uri 'none';
frame-ancestors 'none';
report-to csp-endpointobject-src 'none' et base-uri 'none' ferment les deux contournements qui mettent en
défaut une politique par ailleurs stricte : le contenu de plugin, et un élément <base>
injecté qui redirige toutes les URL de script relatives. frame-ancestors 'none' est le
remplacement moderne de X-Frame-Options. Un nonce neuf à chaque réponse est ce qui vous
permet de retirer 'unsafe-inline' de script-src, d'où vient la quasi-totalité de la
protection XSS de CSP.
Sous-sections
Introduction
Ce qu'est CSP, et comment directives, valeurs et headers s'articulent.
Report-Only
Le header Content-Security-Policy-Report-Only, tester une politique sans l'appliquer.
Valeurs
Ce qui va dans une directive : keywords, host- et scheme-source, hashes et nonce, et le keyword report-sha256.
Directives
Une page par directive, groupées par rôle : fetch, document, navigation, reporting, et plus.
Commencer ici
- Vous débutez avec CSP ? Lisez ce qu'est CSP.
- Vous écrivez votre première politique ? Partez de
script-srcetdefault-src. - Vous déployez en toute sécurité ? Déployez d'abord
Content-Security-Policy-Report-Onlypuis resserrez à partir des reports. - Vous vérifiez une politique en production ? Passez-la dans l'évaluateur CSP.
Reporting
Chaque ressource bloquée produit un report csp-violation qui nomme la directive ayant bloqué et l'URL bloquée, livré via la Reporting API. Ces reports sont la matière première d'une politique : déployez-la en Report-Only, lisez ce qu'elle aurait bloqué, resserrez. CentralCSP les collecte et les agrège par site, donc un déploiement s'appuie sur ce que les navigateurs de vos visiteurs ont réellement observé plutôt que sur des suppositions.
Sources
Vue d'ensemble
Le fonctionnement de chaque politique navigateur configurable, ce contre quoi elle protège, et comment elle remonte ses rapports via la Reporting API.
Ce que c'est
Une politique de sécurité du contenu est une liste d'autorisation en header HTTP que le navigateur applique pour bloquer XSS, clickjacking, contenu mixte et exfiltration.