Directives
Les directives de la politique de sécurité du contenu par catégorie, fetch, document, navigation, reporting, Trusted Types, avec leurs chaînes de repli.
Dernière mise à jour:
Une politique de sécurité du contenu (CSP) se construit à partir de directives. Chaque directive nomme un type de ressource ou un comportement et en fixe la règle : quels hôtes de scripts sont autorisés, qui peut encadrer la page, où la politique envoie ses rapports. Cette page regroupe chaque directive par catégorie et renvoie à sa référence, pour que vous trouviez vite celle qui correspond à ce que vous voulez contrôler.
Pour le reste de la syntaxe de la politique, voir les valeurs qu'une directive accepte et les headers qui la transportent.
Directives fetch
Les directives fetch contrôlent d'où une page peut charger tel ou tel type de
ressource. Elles prennent toutes une liste de sources séparées par des
espaces (ou 'none') et, sauf mention contraire ci-dessous, se rabattent sur
default-src
lorsque vous ne les définissez pas.
| Directive | Contrôle | Se rabat sur |
|---|---|---|
| default-src | La liste de sources de repli pour la plupart des directives fetch | rien |
| script-src | JavaScript : éléments, inline, eval, handlers | default-src |
| script-src-elem | Éléments <script> | script-src |
| script-src-attr | Attributs d'event handler inline | script-src |
| style-src | Feuilles de style et styles inline | default-src |
| style-src-elem | <style> et <link rel=stylesheet> | style-src |
| style-src-attr | Attributs style= inline | style-src |
| img-src | Images et favicons | default-src |
| font-src | Chargements @font-face | default-src |
| media-src | <audio>, <video>, <track> | default-src |
| object-src | <object> et <embed> | default-src |
| connect-src | fetch, XHR, WebSocket, EventSource, Beacon | default-src |
| manifest-src | Manifeste d'application web | default-src |
| frame-src | Sources <frame> et <iframe> | child-src |
| child-src | Repli pour frame-src et worker-src | default-src |
| worker-src | Scripts Worker, SharedWorker, ServiceWorker | child-src |
| prefetch-src | Ressources préchargées et prérendues | default-src |
| fenced-frame-src | Sources <fencedframe> | frame-src |
prefetch-src est déprécié et retiré de Chromium, et fenced-frame-src est
expérimental et propre à Chromium ; les pages de directives détaillent le statut
actuel de chacune.
Directives document
Ces directives régissent des propriétés du document lui-même plutôt qu'un fetch.
Aucune d'elles ne se rabat sur default-src.
| Directive | Contrôle |
|---|---|
| base-uri | Les URL qu'un <base href> peut définir |
| sandbox | Applique des flags de sandbox au document |
| plugin-types | Types MIME de plugins autorisés (déprécié) |
base-uri n'a pas de repli, donc l'omettre laisse la page exposée à l'injection
de balise base. sandbox prend des tokens de sandbox plutôt qu'une liste de
sources et ne peut pas être défini via une balise <meta>. plugin-types est
déprécié ; utilisez plutôt object-src 'none'.
Directives navigation
Les directives de navigation restreignent où la page peut naviguer et qui peut
naviguer vers elle. Aucune ne se rabat sur default-src.
| Directive | Contrôle |
|---|---|
| form-action | Cibles <form action> autorisées |
| frame-ancestors | Quels parents peuvent intégrer cette page |
frame-ancestors est la directive anti-clickjacking et remplace
X-Frame-Options.
Elle ne peut pas non plus être définie via une balise <meta>.
Directives reporting
Les directives de reporting indiquent où le navigateur doit envoyer les rapports de violation. Elles se configurent par politique et n'ont pas de repli.
| Directive | Contrôle |
|---|---|
| report-to | Nomme un groupe d'endpoint de reporting issu de la Reporting API |
| report-uri | Envoie les rapports directement à une URI (déprécié, à conserver à côté de report-to) |
report-to référence un groupe défini dans le header
Reporting-Endpoints.
report-uri est le mécanisme historique et est ignoré là où report-to est pris
en charge. report-to est disponible depuis peu dans les versions actuelles de
Chrome, Firefox et Safari : ne gardez donc report-uri que pour les navigateurs
plus anciens. Voir la
vue d'ensemble des headers CSP
pour comprendre comment ces pièces s'articulent.
Directives WebRTC
Aucune directive fetch ne couvre le trafic WebRTC, d'où la directive dédiée
ajoutée par le brouillon de la spec. Elle prend 'allow' ou 'block' plutôt
qu'une liste de sources.
| Directive | Contrôle |
|---|---|
| webrtc | Les connexions WebRTC (spec uniquement, aucune prise en charge navigateur pour le moment) |
Autres directives et Trusted Types
Ces directives n'entrent pas dans les catégories ci-dessus. Aucune ne se rabat sur
default-src.
- upgrade-insecure-requests : une directive de type flag qui réécrit les URL de sous-ressources et de navigation non sécurisées en HTTPS. Elle ne remplace pas HSTS.
- block-all-mixed-content :
une directive de type flag qui bloque toute sous-ressource HTTP sur une page
HTTPS. Elle est dépréciée, remplacée par
upgrade-insecure-requestset le blocage par défaut du contenu mixte. - require-trusted-types-for :
force les Trusted Types sur les sinks de DOM XSS ; sa valeur est le token
'script'. Disponible depuis peu dans les versions actuelles de Chrome, Firefox et Safari. - trusted-types : une allowlist de noms de politiques Trusted Types qui limite les politiques que la page peut créer. Disponible depuis peu dans les versions actuelles de Chrome, Firefox et Safari.
Directives supprimées
Trois directives ont été retirées de la plateforme sans jamais avoir vu le jour. Chacune garde une courte page de référence, car elles traînent encore dans d'anciennes politiques et d'anciens billets de blog.
| Directive | Statut | Ce qui la remplace |
|---|---|---|
| navigate-to | ⚠️ Déprécié | Rien |
| referrer | ⚠️ Déprécié | Le header Referrer-Policy |
| require-sri-for | ⚠️ Déprécié | Le header Integrity-Policy |
Une quatrième, disown-opener, a été abandonnée au profit de
Cross-Origin-Opener-Policy
et n'a pas de page dédiée. prefetch-src et plugin-types, listées plus haut
comme dépréciées, ont aussi leurs propres pages.
Chaînes de repli
Lorsqu'une directive n'est pas définie, le navigateur parcourt une chaîne pour
trouver une règle. L'erreur de CSP la plus courante est de supposer que
default-src couvre tout ; elle ne couvre pas les directives de document, de
navigation, de reporting ni de Trusted Types, qui doivent donc chacune être
définies explicitement.
Le graphe couvre toutes les directives qui participent à une chaîne de repli. ⚠️ signale une directive dépréciée, 🧪 une directive expérimentale ; les directives sans repli sont listées après le graphe, et la page de chaque directive détaille son statut exact.
script-src-elemetscript-src-attrversscript-srcversdefault-src; la variante-attrsaute-elemet se rabat directement surscript-srcstyle-src-elemetstyle-src-attrversstyle-srcversdefault-src, avec le même sautframe-srcverschild-srcversdefault-srcworker-srcverschild-srcversscript-srcversdefault-src; le saut dechild-srcversscript-srcne s'applique qu'aux chargements de workersfenced-frame-src(expérimentale, Chromium uniquement) versframe-srcverschild-srcversdefault-srcconnect-src,font-src,img-src,manifest-src,media-src,object-src, et la dépréciéeprefetch-srcse rabattent chacune surdefault-src- Sans repli (à définir explicitement) :
base-uri,form-action,frame-ancestors,sandbox,report-uri,report-to,upgrade-insecure-requests,block-all-mixed-content,require-trusted-types-for,trusted-types,webrtc
Pour voir quelles directives manquent à une politique réelle, passez-la dans l'évaluateur CSP, ou relevez les headers d'une page en production avec le scanner CSP.
Voir aussi
Sources
Ce que c'est
La politique de sécurité du contenu est une liste d'autorisation en header HTTP que le navigateur applique contre XSS, clickjacking, contenu mixte et exfiltration.
Valeurs
Vue générale des types de valeurs acceptés par une directive CSP, mots-clés, sources hôte, sources de schéma, nonces, hashs et report-sample.