--- title: Politique de sécurité de contenu slug: Web/HTTP/Headers/Content-Security-Policy tags: - CSP - HTTP - Référence(2) - Sécurité - en-tête translation_of: Web/HTTP/Headers/Content-Security-Policy ---
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 ({{Glossary("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 |
Content-Security-Policy: <policy-directive>; <policy-directive>
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
, si vous souhaitez réguler les contextes de navigation imbriqués et les workers séparément, vous pouvez utiliser respectivement les directives {{CSP("frame-src")}} et {{CSP("worker-src")}}.Les éléments contrôlés pa ar object-src
sont considérés peut-être par coïcidence comme des éléments HTML du passé et ne recevront de nouvelles fonctionnalités normalisées (comme les attributs de sécurité sandbox
et allow
pour <iframe>
). De ce fait, il est recommandé de restreindre cette directive, c'est-à-dire la définir explicitement à object-src 'none'
dans la mesure du possible.
on<eventName>
.rel="stylesheet"
.style
.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.
Les directives de navigation permettent par exemple de paramétrer les emplacements vers lesquels l'utilisateur peut naviguer ou envoyer un formulaire.
window.location
, window.open
, etc.)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 {{HTTPHeader("Content-Security-Policy-Report-Only")}}.
POST
à l'URI indiquée.Bien que la directive report-to
est prévue remplacer la directive report-uri
maintenant dépréciée, report-to
n'est pas encore supportée par la plupart des navigateurs modernes. Par rétrocompatibilité avec les navigateurs courants et tout en prévoyant une compatibilité future quand les navigateurs supporteront report-to
, vous pouvez spécifier les deux directives report-uri
et report-to
:
Content-Security-Policy: ...; report-uri https://endpoint.com; report-to groupname
Dans les navigateurs qui supportent report-to
, la directive report-uri
sera ignorée.
SecurityPolicyViolationEvent
.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éé.
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 {{HTTPHeader("Content-Security-Policy-Report-Only")}} et l'élément {{HTMLElement("meta")}}.
L'en-tête Content-Security-Policy
peut être utilisé plus d'une fois comme illustré ci-après. On notera la directive {{CSP("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/
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:">
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'
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écification | État | Commentaires |
---|---|---|
{{specName("CSP 3.0")}} | {{Spec2('CSP 3.0')}} | 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 . |
{{specName("Mixed Content")}} | {{Spec2("Mixed Content")}} | Ajout de block-all-mixed-content . |
{{specName("Subresource Integrity")}} | {{Spec2("Subresource Integrity")}} | Ajout de require-sri-for . |
{{specName("Upgrade Insecure Requests")}} | {{Spec2("Upgrade Insecure Requests")}} | Ajout de upgrade-insecure-requests . |
{{specName("CSP 1.1")}} | {{Spec2("CSP 1.1")}} | Ajout de base-uri , child-src , form-action , frame-ancestors , plugin-types , referrer , reflected-xss et report-uri . Dépréciation de frame-src . |
{{specName("CSP 1.0")}} | {{Spec2("CSP 1.0")}} | 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 . |
{{Compat("http.headers.csp.Content-Security-Policy")}}
Les sécurités pour l'affichage et la confidentialité dans les outils de développement de Firefox