Politique de sécurité de contenu

L'en-tête de réponse HTTP Content-Security-Policy permet aux administrateurs d'un site web de contrôler les ressources que l'agent utilisateur est autorisé à charger pour une page donnée. Bien qu'il y ait quelques exceptions, ces règles impliquent la plupart du temps de définir les origines du serveur et les points d'accès pour les scripts. Cet en-tête aide à se protéger contre les attaques de cross-site scripting (XSS).

Pour plus d'informations, voir cet article sur Content Security Policy (CSP).

Type d'en-tête En-tête de réponse
Nom d'en-tête interdit Non

Syntaxe

Content-Security-Policy: <policy-directive>; <policy-directive>

Directives

Directives de récupération (fetch)

Les directives de récupération (ou fetch directives en anglais) contrôlent les emplacements à partir desquels certains types de ressource peuvent être chargés.

child-src
Définit les sources valides pour les web workers et les éléments qui représentent des contextes de navigation imbriqués tels que <frame> et <iframe>.
connect-src
Restreint les URL qui peuvent être chargées via des scripts.
default-src
Représente la directive de récupération par défaut, utilisées par les autres directives de récupération lorsqu'elles ne sont pas définies explicitement.
font-src
Définit les sources valides pour les polices de caractères chargées depuis @font-face.
frame-src
Définit les sources valides pour les éléments qui représentent des contextes de navigation imbriqués, tels que <frame> et <iframe>.
img-src
Définit les sources valides pour les images et les favicons.
manifest-src
Définit les sources valides pour les fichiers de manifeste d'application.
media-src
Définit les sources valides pour les ressources média des éléments <audio> et <video>.
object-src
Définit les sources valides pour les ressources des éléments <object>, <embed> et <applet>.
script-src
Définit les sources valides pour les fichiers JavaScript.
style-src
Définit les sources valides pour les feuilles de styles.
worker-src
Définit les sources valides pour les scripts des Worker, SharedWorker et ServiceWorker.

Directives de document

Les directives de document permettent de paramétrer les propriétés d'un document ou d'un environnement pour un web worker auquel une règle de sécurité s'applique.

base-uri
Restreint les URL qui peuvent être utilisées au sein de l'élément <base> d'un document.
plugin-types
Restreint le type de plugin qui peut être intégré dans un document en limitant le type de ressource qui peut être chargé.
sandbox
Active un bac-à-sable (sandbox) pour la ressource visée. Cela fonctionne de façon analogue à l'attribut sandbox de <iframe>.

Directives de navigation

Les directives de navigation permettent par exemple de paramétrer les emplacements vers lesquels l'utilisateur peut naviguer ou envoyer un formulaire.

form-action
Restreint les URL qui peuvent être utilisées comme cibles pour envoyer des formulaires depuis un contexte donné.
frame-ancestors
Définit les parent valides qui peuvent intégrer une page grâce aux éléments <frame><iframe><object><embed>, ou <applet>.
navigation-to
Restreint les URL vers lesquelles on peut naviguer depuis un document, quel que soit le moyen de navigation (un lien, un formulaire, window.location, window.open, etc.)

Directives de rapport

Les directives de rapport permettent de contrôler ce qui se passe lorsqu'une règle CSP est violée. Voir également l'en-tête Content-Security-Policy-Report-Only.

report-uri
Indique à l'agent utilisateur de rapporter les tentatives d'enfreintes du CSP. Un rapport d'enfreinte est un ensemble de documents JSON envoyés via une requête HTTP POST à l'URI indiquée.
report-to
Déclenche un évènement SecurityPolicyViolationEvent.

Autres directives

block-all-mixed-content
Empêche le chargement de toute ressource via HTTP lorsque la page est chargée avec HTTPS.
referrer
Referrer-Policy doit être utilisé à la place. Était utilisée pour indiquer l'en-tête référent (sic) pour les liens sortants.
require-sri-for
Oblige à utiliser le contrôle d'intégrité des sous-ressources (SRI) pour les scripts ou les styles de la page.
upgrade-insecure-requests
Indique à l'agent utilisateur de considérer toutes les URL non-sécurisées d'un site (celles servies via HTTP) comme si elles avaient été remplacées par des URL sécurisées. Cette directive est destinée aux sites web qui ont de nombreuses URL historiques non-sécurisées et qui doivent être réécrites.

Utilisation du CSP dans les web workers

En général, les web workers ne sont pas gérés par les règles de sécurité du contenu du document (ou du worker parent) qui les a créé. Pour indiquer une règle de sécurité du contenu pour le worker, on utilisera un en-tête de réponse Content-Security-Policy pour la requête qui a demandé le script du worker.

Il y a une exception à cette règle lorsque l'origine du script d'un worker est un identifiant global unique (par exemple si l'URL utilise un schéma de donnée ou un blob). Dans ce cas, le worker hérite de la règle de sécurité du contenu depuis le document ou le worker qui l'a créé.

Gérer plusieurs politiques de sécurité

Le CSP permet d'indiquer plusieurs règles pour une même ressource avec l'en-tête Content-Security-Policy, l'en-tête Content-Security-Policy-Report-Only et l'élément <meta>.

L'en-tête Content-Security-Policy peut être utilisé plus d'une fois comme illustré ci-après. On notera la directive connect-src utilisée ici. Bien que la deuxième règle autorise la connexion, la première contient connect-src 'none'. L'ajout de règles supplémentaires permet uniquement d'augmenter les protections. Les niveaux les plus stricts pour chaque règle sont alors utilisés. Dans l'exemple qui suit, cela signifie que la directive connect-src 'none' sera respectée.

Content-Security-Policy: default-src 'self' http://example.com;
                         connect-src 'none';
Content-Security-Policy: connect-src http://example.com/;
                         script-src http://example.com/

Exemples

Exemple 1

Dans cet exemple, on désactive les scripts écrits à même le document (inline), les opérations eval() et les ressources (images, polices, scripts, etc.) peuvent uniquement être chargées via HTTPS :

// en-tête HTTP
Content-Security-Policy: default-src https:

// version avec la balise HTML meta
<meta http-equiv="Content-Security-Policy" content="default-src https:">

Exemple 2

Cet exemple est plutôt adapté pour un site historique qui utilise de nombreux scripts écrits dans les documents mais pour lequel on veut s'assurer que les ressources sont chargées via HTTPS et pour lequel on veut désactiver les plugins :

Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'

Exemple 3

On ne met pas en place la règle de sécurité mais on récolte les enfreintes qui se seraient produites pour cette règle :

Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-endpoint/

Pour plus d'exemples, consulter les recommandations de Mozilla pour la sécurité web.

Spécifications

Spécification État Commentaires
Content Security Policy Level 3 Version de travail Ajout de manifest-src, navigation-to, report-to, strict-dynamic, worker-src. frame-src n'est plus déprécié. report-uri est déprécié au profit de report-to.
Mixed Content Candidat au statut de recommandation Ajout de block-all-mixed-content.
Subresource Integrity Recommendation Ajout de require-sri-for.
Upgrade Insecure Requests Candidat au statut de recommandation Ajout de upgrade-insecure-requests.
Content Security Policy Level 2 Recommendation Ajout de base-uri, child-src, form-action, frame-ancestors, plugin-types, referrer, reflected-xss et report-uri. Dépréciation de frame-src.
Content Security Policy 1.0 Obsolete Définition de connect-src, default-src, font-src, frame-src, img-src, media-src, object-src, report-uri, sandbox, script-src et style-src.

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidFirefox pour AndroidOpera pour AndroidSafari sur iOSSamsung Internet
Content-Security-PolicyChrome Support complet 25
Support complet 25
Support complet 14
Autre nom
Autre nom Cette fonctionnalité utilise le nom non-standard : X-Webkit-CSP
Edge Support complet 14Firefox Support complet 23
Support complet 23
Support complet 4
Autre nom
Autre nom Cette fonctionnalité utilise le nom non-standard : X-Content-Security-Policy
IE Support complet 10
Notes Autre nom
Support complet 10
Notes Autre nom
Notes Only supporting 'sandbox' directive.
Autre nom Cette fonctionnalité utilise le nom non-standard : X-Content-Security-Policy
Opera Support complet 15Safari Support complet 7
Support complet 7
Support complet 6
Autre nom
Autre nom Cette fonctionnalité utilise le nom non-standard : X-Webkit-CSP
WebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 23Opera Android Support complet OuiSafari iOS Support complet 7.1
Support complet 7.1
Support complet 5.1
Notes
Notes X-Webkit-CSP
Samsung Internet Android Support complet Oui
base-uriChrome Support complet 40Edge Aucun support NonFirefox Support complet 35IE Aucun support NonOpera Support complet 27Safari Support complet 10WebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 35Opera Android ? Safari iOS Support complet 9.3Samsung Internet Android Support complet Oui
block-all-mixed-contentChrome Support complet OuiEdge ? Firefox Support complet 48IE Aucun support NonOpera Support complet OuiSafari ? WebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 48Opera Android ? Safari iOS ? Samsung Internet Android Support complet Oui
child-srcChrome Support complet 40Edge Support complet 15Firefox Support complet 45IE Aucun support NonOpera Support complet 27Safari Support complet 10WebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 45Opera Android ? Safari iOS Support complet 9.3Samsung Internet Android Support complet Oui
connect-srcChrome Support complet 25Edge Support complet 14Firefox Support complet 23
Notes
Support complet 23
Notes
Notes Prior to Firefox 50, ping attributes of <a> elements weren't covered by connect-src.
IE Aucun support NonOpera Support complet 15Safari Support complet 7WebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 23Opera Android ? Safari iOS Support complet 7.1Samsung Internet Android Support complet Oui
default-srcChrome Support complet 25Edge Support complet 14Firefox Support complet 23IE Aucun support NonOpera Support complet 15Safari Support complet 7WebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 23Opera Android ? Safari iOS Support complet 7.1Samsung Internet Android Support complet Oui
font-srcChrome Support complet 25Edge Support complet 14Firefox Support complet 23IE Aucun support NonOpera Support complet 15Safari Support complet 7WebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 23Opera Android ? Safari iOS Support complet 7.1Samsung Internet Android Support complet Oui
form-actionChrome Support complet 40Edge Support complet 15Firefox Support complet 36IE Aucun support NonOpera Support complet 27Safari Support complet 10WebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 36Opera Android ? Safari iOS Support complet 9.3Samsung Internet Android Support complet Oui
frame-ancestorsChrome Support complet 40Edge Support complet 15Firefox Support complet 33
Notes
Support complet 33
Notes
Notes Before Firefox 58, frame-ancestors is ignored in Content-Security-Policy-Report-Only.
IE Aucun support NonOpera Support complet 26Safari Support complet 10WebView Android ? Chrome Android Support complet OuiFirefox Android Support complet 33
Notes
Support complet 33
Notes
Notes Before Firefox for Android 58, frame-ancestors is ignored in Content-Security-Policy-Report-Only.
Opera Android ? Safari iOS Support complet 9.3Samsung Internet Android Support complet Oui
frame-srcChrome Support complet 25Edge Support complet 14Firefox Support complet 23IE Aucun support NonOpera Support complet 15Safari Support complet 7WebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 23Opera Android ? Safari iOS Support complet 7.1Samsung Internet Android Support complet Oui
img-srcChrome Support complet 25Edge Support complet 14Firefox Support complet 23IE Aucun support NonOpera Support complet 15Safari Support complet 7WebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 23Opera Android ? Safari iOS Support complet 7.1Samsung Internet Android Support complet Oui
manifest-srcChrome Support complet OuiEdge Aucun support NonFirefox Support complet 41IE Aucun support NonOpera Support complet OuiSafari Aucun support NonWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 41Opera Android ? Safari iOS Aucun support NonSamsung Internet Android Support complet Oui
media-srcChrome Support complet 25Edge Support complet 14Firefox Support complet 23IE Aucun support NonOpera Support complet 15Safari Support complet 7WebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 23Opera Android ? Safari iOS Support complet 7.1Samsung Internet Android Support complet Oui
<meta> element supportChrome Support complet OuiEdge Support complet OuiFirefox Support complet 45IE Aucun support NonOpera Support complet OuiSafari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 45Opera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Oui
navigate-to
Expérimentale
Chrome Aucun support NonEdge Aucun support NonFirefox Aucun support NonIE Aucun support NonOpera Aucun support NonSafari Aucun support NonWebView Android Aucun support NonChrome Android Aucun support NonFirefox Android Aucun support NonOpera Android Aucun support NonSafari iOS Aucun support NonSamsung Internet Android Aucun support Non
object-srcChrome Support complet 25Edge Support complet 14Firefox Support complet 23IE Aucun support NonOpera Support complet 15Safari Support complet 7WebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 23Opera Android ? Safari iOS Support complet 7.1Samsung Internet Android Support complet Oui
plugin-typesChrome Support complet 40Edge Support complet 15Firefox Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 1045899.
IE Aucun support NonOpera Support complet 27Safari Support complet 10WebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Aucun support NonOpera Android ? Safari iOS Support complet 9.3Samsung Internet Android Support complet Oui
prefetch-src
Expérimentale
Chrome Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 801561.
Edge Aucun support NonFirefox Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 1457204.
IE Aucun support NonOpera Aucun support NonSafari Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 185070.
WebView Android Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 801561.
Chrome Android Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 801561.
Firefox Android Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 1457204.
Opera Android Aucun support NonSafari iOS Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 185070.
Samsung Internet Android Aucun support Non
referrer
ObsolèteNon-standard
Chrome Aucun support 33 — 56Edge Aucun support NonFirefox Aucun support 37 — 62IE Aucun support NonOpera Aucun support ? — 43Safari Aucun support NonWebView Android Aucun support 4.4.3 — 56Chrome Android Aucun support 33 — 56Firefox Android Aucun support 37 — 62Opera Android Aucun support ? — 43Safari iOS Aucun support NonSamsung Internet Android Support complet Oui
report-sample
Expérimentale
Chrome Support complet 59Edge ? Firefox ? IE ? Opera Support complet 46Safari ? WebView Android Support complet 59Chrome Android Support complet 59Firefox Android ? Opera Android Support complet 43Safari iOS ? Samsung Internet Android Support complet 7.0
report-toChrome Support complet 70Edge Aucun support NonFirefox Aucun support NonIE Aucun support NonOpera Aucun support NonSafari Aucun support NonWebView Android Support complet 70Chrome Android Support complet 70Firefox Android Aucun support NonOpera Android Aucun support NonSafari iOS Aucun support NonSamsung Internet Android Aucun support Non
report-uri
Obsolète
Chrome Support complet 25Edge Support complet 14Firefox Support complet 23IE Aucun support NonOpera Support complet 15Safari Support complet 7WebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 23Opera Android ? Safari iOS Support complet 7.1Samsung Internet Android Support complet Oui
require-sri-for
Expérimentale
Chrome Support complet 54Edge Aucun support NonFirefox Aucun support 49 — 68
Désactivée
Aucun support 49 — 68
Désactivée
Désactivée From version 49 until version 68 (exclusive): this feature is behind the security.csp.experimentalEnabled preference (needs to be set to true). To change preferences in Firefox, visit about:config.
IE Aucun support NonOpera Support complet 41Safari Aucun support NonWebView Android Support complet 54Chrome Android Support complet 54Firefox Android Aucun support 49 — 68
Désactivée
Aucun support 49 — 68
Désactivée
Désactivée From version 49 until version 68 (exclusive): this feature is behind the security.csp.experimentalEnabled preference (needs to be set to true). To change preferences in Firefox, visit about:config.
Opera Android Support complet 41Safari iOS Aucun support NonSamsung Internet Android Support complet 6.0
sandboxChrome Support complet 25Edge Support complet 14Firefox Support complet 50IE Support complet 10Opera Support complet 15Safari Support complet 7WebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 50Opera Android ? Safari iOS Support complet 7.1Samsung Internet Android Support complet Oui
script-srcChrome Support complet 25Edge Support complet 14Firefox Support complet 23IE Aucun support NonOpera Support complet 15Safari Support complet 7WebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 23Opera Android ? Safari iOS Support complet 7.1Samsung Internet Android Support complet Oui
script-src-attr
Expérimentale
Chrome Support complet 75Edge Aucun support NonFirefox Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 1529337.
IE Aucun support NonOpera Support complet 62Safari Aucun support NonWebView Android Support complet 75Chrome Android Support complet 75Firefox Android Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 1529337.
Opera Android ? Safari iOS Aucun support NonSamsung Internet Android ?
script-src-elem
Expérimentale
Chrome Support complet 75Edge Aucun support NonFirefox Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 1529337.
IE Aucun support NonOpera Support complet 62Safari Aucun support NonWebView Android Support complet 75Chrome Android Support complet 75Firefox Android Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 1529337.
Opera Android ? Safari iOS Aucun support NonSamsung Internet Android ?
strict-dynamicChrome Support complet 52Edge Aucun support NonFirefox Support complet 52IE Aucun support NonOpera Support complet 39Safari Aucun support NonWebView Android Support complet 52Chrome Android Support complet 52Firefox Android Aucun support NonOpera Android Support complet 41Safari iOS Aucun support NonSamsung Internet Android Support complet 6.0
style-srcChrome Support complet 25Edge Support complet 14Firefox Support complet 23IE Aucun support NonOpera Support complet 15Safari Support complet 7WebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 23Opera Android ? Safari iOS Support complet 7.1Samsung Internet Android Support complet Oui
style-src-attr
Expérimentale
Chrome Support complet 75Edge Aucun support NonFirefox Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 1529338.
IE Aucun support NonOpera Support complet 62Safari Aucun support NonWebView Android Support complet 75Chrome Android Support complet 75Firefox Android Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 1529338.
Opera Android ? Safari iOS Aucun support NonSamsung Internet Android ?
style-src-elem
Expérimentale
Chrome Support complet 75Edge Aucun support NonFirefox Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 1529338.
IE Aucun support NonOpera Support complet 62Safari Aucun support NonWebView Android Support complet 75Chrome Android Support complet 75Firefox Android Aucun support Non
Notes
Aucun support Non
Notes
Notes See bug 1529338.
Opera Android ? Safari iOS Aucun support NonSamsung Internet Android ?
trusted-types
Expérimentale
Chrome ?
?
Aucun support 73 — 76
Désactivée
Désactivée From version 73 until version 76 (exclusive): this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge Aucun support NonFirefox Aucun support NonIE Aucun support NonOpera Aucun support NonSafari Aucun support NonWebView Android Aucun support NonChrome Android ?
?
Aucun support 73 — 76
Désactivée
Désactivée From version 73 until version 76 (exclusive): this feature is behind the #enable-experimental-productivity-features preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Firefox Android Aucun support NonOpera Android Aucun support NonSafari iOS Aucun support NonSamsung Internet Android Aucun support Non
upgrade-insecure-requestsChrome Support complet 43Edge Aucun support Non
Notes
Aucun support Non
Notes
Notes Under consideration for future release.
Firefox Support complet 42IE Aucun support NonOpera Support complet 30Safari Support complet 10.1WebView Android Support complet 43Chrome Android Support complet 43Firefox Android Support complet 42Opera Android Support complet 30Safari iOS Support complet 10.3Samsung Internet Android Support complet 4.0
Worker supportChrome Support complet OuiEdge ? Firefox Support complet 50IE Aucun support NonOpera ? Safari Aucun support NonWebView Android Support complet OuiChrome Android Support complet OuiFirefox Android Support complet 50Opera Android ? Safari iOS Aucun support NonSamsung Internet Android Support complet Oui
worker-srcChrome Support complet 59
Notes
Support complet 59
Notes
Notes Chrome 59 and higher skips the deprecated child-src directive.
Edge Aucun support NonFirefox Support complet 58IE Aucun support NonOpera Support complet 48Safari Aucun support NonWebView Android Support complet 59
Notes
Support complet 59
Notes
Notes Chrome 59 and higher skips the deprecated child-src directive.
Chrome Android Support complet 59
Notes
Support complet 59
Notes
Notes Chrome 59 and higher skips the deprecated child-src directive.
Firefox Android Support complet 58Opera Android Support complet 45Safari iOS Aucun support NonSamsung Internet Android Support complet 7.0

Légende

Support complet  
Support complet
Aucun support  
Aucun support
Compatibilité inconnue  
Compatibilité inconnue
Fonctionnalité expérimentale. Celle-ci peut être amenée à changer par la suite.
Fonctionnalité expérimentale. Celle-ci peut être amenée à changer par la suite.
Fonctionnalité non-standard. Celle-ci peut être incorrectement supportée par les autres navigateurs.
Fonctionnalité non-standard. Celle-ci peut être incorrectement supportée par les autres navigateurs.
Obsolète. Les nouveaux sites web ne doivent pas utiliser cette fonctionnalité.
Obsolète. Les nouveaux sites web ne doivent pas utiliser cette fonctionnalité.
Voir les notes d'implémentation.
Voir les notes d'implémentation.
Une action explicite de l'utilisateur est nécessaire pour activer cette fonctionnalité.
Une action explicite de l'utilisateur est nécessaire pour activer cette fonctionnalité.
Cette fonctionnalité utilise un nom non-standard.
Cette fonctionnalité utilise un nom non-standard.

Voir aussi