CentralCSP
PolitiquesContent-Security-PolicyIntroduction

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.

DirectiveContrôleSe rabat sur
default-srcLa liste de sources de repli pour la plupart des directives fetchrien
script-srcJavaScript : éléments, inline, eval, handlersdefault-src
script-src-elemÉléments <script>script-src
script-src-attrAttributs d'event handler inlinescript-src
style-srcFeuilles de style et styles inlinedefault-src
style-src-elem<style> et <link rel=stylesheet>style-src
style-src-attrAttributs style= inlinestyle-src
img-srcImages et faviconsdefault-src
font-srcChargements @font-facedefault-src
media-src<audio>, <video>, <track>default-src
object-src<object> et <embed>default-src
connect-srcfetch, XHR, WebSocket, EventSource, Beacondefault-src
manifest-srcManifeste d'application webdefault-src
frame-srcSources <frame> et <iframe>child-src
child-srcRepli pour frame-src et worker-srcdefault-src
worker-srcScripts Worker, SharedWorker, ServiceWorkerchild-src
prefetch-srcRessources préchargées et prérenduesdefault-src
fenced-frame-srcSources <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.

DirectiveContrôle
base-uriLes URL qu'un <base href> peut définir
sandboxApplique des flags de sandbox au document
plugin-typesTypes 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.

DirectiveContrôle
form-actionCibles <form action> autorisées
frame-ancestorsQuels 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.

DirectiveContrôle
report-toNomme un groupe d'endpoint de reporting issu de la Reporting API
report-uriEnvoie 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.

DirectiveContrôle
webrtcLes 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-requests et 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.

DirectiveStatutCe 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-elem et script-src-attr vers script-src vers default-src ; la variante -attr saute -elem et se rabat directement sur script-src
  • style-src-elem et style-src-attr vers style-src vers default-src, avec le même saut
  • frame-src vers child-src vers default-src
  • worker-src vers child-src vers script-src vers default-src ; le saut de child-src vers script-src ne s'applique qu'aux chargements de workers
  • fenced-frame-src (expérimentale, Chromium uniquement) vers frame-src vers child-src vers default-src
  • connect-src, font-src, img-src, manifest-src, media-src, object-src, et la dépréciée prefetch-src se rabattent chacune sur default-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

On this page