MDN will be in maintenance mode on Friday September 22nd, starting at 10 AM Pacific / 5 PM UTC, for about 1 hour.

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>.
disown-opener
Permet d'assurer qu'une ressource désavoue ce qui l'a ouvert lorsqu'on navigue vers elle.

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 Brouillon de l'éditeur Ajout de disown-opener, manifest-src, navigation-to, report-uri, 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 Candidat au statut de recommandation 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

Fonctionnalité Chrome Edge Firefox Internet Explorer Opera Safari Servo
Support simple2511423.021031574?
Meta element support(Oui)(Oui)45.0Aucun support(Oui)(Oui)?
Worker support(Oui)?50.0Aucun support?Aucun support?
Fonctionnalité Android Chrome for Android Edge Mobile Firefox for Android IE Mobile Opera Mobile Safari Mobile
Support simple4.4(Oui)(Oui)23.0??7.15
Meta element support(Oui)(Oui)(Oui)45.0Aucun support(Oui)(Oui)
Worker support?(Oui)?50.0Aucun support?Aucun support

1. Implemented as X-Webkit-CSP header in Chrome 14.

2. Implemented as X-Content-Security-Policy header in Firefox 4.

3. Implemented as X-Content-Security-Policy header, only supporting 'sandbox' directive.

4. Implemented as X-Webkit-CSP header in Safari 6.

5. Implemented as X-Webkit-CSP header in iOS 5.1.

Voir aussi

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : SphinxKnight
 Dernière mise à jour par : SphinxKnight,