Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. HTTP
  3. Référence
  4. En-têtes
  5. Content-Security-Policy

Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in EnglishAlways switch to English

En-tête Content-Security-Policy (CSP)

Baseline Widely available *

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis août 2016.

* Certaines parties de cette fonctionnalité peuvent bénéficier de prise en charge variables.

L'en-tête de réponse HTTPContent-Security-Policy permet aux administrateur·ice·s d'un site web de contrôler les ressources que l'agent utilisateur est autorisé à charger pour une page donnée. À quelques exceptions près, les règles consistent principalement à définir les origines du serveur et les points d'accès pour les scripts.Cela permet de se prémunir contre les attaquesde script inter-sites.

Pour plus d'informations, consultez leguide Content Security Policy (CSP) pour des détails sur la livraison d'une CSP au navigateur, son apparence, ainsi que des cas d'utilisation et des stratégies de déploiement.

Type d'en-têteEn-tête de réponse

Syntaxe

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

<policy-directive> se compose de :<directive> <value> sans ponctuation interne.

Directives

Directives de récupération (fetch)

Les directives de récupération contrôlent les emplacements à partir desquels certains types de ressources peuvent être chargés.

child-src

Définit les sources valides pour lesweb workers et les contextes de navigation imbriqués chargés avec des éléments HTML tels que<frame> et<iframe>.

Repli pourframe-src etworker-src.

connect-src

Restreint les URL qui peuvent être chargées via les interfaces de script.

default-src

Sert de repli pour les autresdirectives de récupération.

Repli pour toutes les autres directives de récupération.

fenced-frame-srcExpérimental

Définit les sources valides pour les contextes de navigation imbriqués chargés dans des éléments HTML<fencedframe>.

font-src

Définit les sources valides pour les polices chargées avec@font-face.

frame-src

Définit les sources valides pour les contextes de navigation imbriqués chargés dans des éléments HTML 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 le chargement des médias avec les éléments HTML<audio>,<video> et<track>.

object-src

Définit les sources valides pour les éléments HTML<object> et<embed>.

prefetch-srcObsolèteNon standard

Définit les sources valides à précharger ou à pré-rendre.

script-src

Définit les sources valides pour les ressources JavaScript et WebAssembly.

Repli pourscript-src-elem etscript-src-attr.

script-src-elem

Définit les sources valides pour les éléments HTML JavaScript<script>.

script-src-attr

Définit les sources valides pour les gestionnaires d'évènements JavaScript en ligne.

style-src

Définit les sources valides pour les feuilles de styles.

Repli pourstyle-src-elem etstyle-src-attr.

style-src-elem

Définit les sources valides pour les éléments HTML<style> et les éléments HTML<link> ayantrel="stylesheet".

style-src-attr

Définit les sources valides pour les styles en ligne appliqués à des éléments individuels du DOM.

worker-src

Définit les sources valides pour les scriptsWorker,SharedWorker ouServiceWorker.

Toutes les directives de récupération peuvent être définies avec la valeur unique'none', indiquant que le type de ressource concerné doit être complètement bloqué, ou avec une ou plusieurs valeurs d'expression de source, indiquant les sources valides pour ce type de ressource. VoirSyntaxe des directives de récupération pour plus de détails.

Replis

Certaines directives de récupération servent de replis pour d'autres directives plus spécifiques. Cela signifie que si la directive plus spécifique n'est pas définie, alors le repli est utilisé pour définir une règle pour ce type de ressource.

  • default-src est un repli pour toutes les autres directives de récupération.
  • script-src est un repli pourscript-src-attr etscript-src-elem.
  • style-src est un repli pourstyle-src-attr etstyle-src-elem.
  • child-src est un repli pourframe-src etworker-src.

Par exemple :

  • Siimg-src est omise mais quedefault-src est incluse, alors la règle définie pardefault-src sera appliquée aux images.
  • Siscript-src-elem est omise mais quescript-src est incluse, alors la règle définie parscript-src sera appliquée aux éléments<script>.
  • Siscript-src-elem etscript-src sont toutes deux omises, mais quedefault-src est incluse, alors la règle définie pardefault-src sera appliquée aux éléments<script>.

Directives de document

Les directives de document permettent de paramétrer les propriétés d'un document ou d'un environnementworker auquel une règle s'applique.

base-uri

Restreint les URL qui peuvent être utilisées dans l'élément<base> d'un document.

sandbox

Active un bac-à-sable pour la ressource demandée, de façon analogue à l'attributsandbox de<iframe>.

Directives de navigation

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

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 parents valides qui peuvent intégrer une page grâce aux éléments<frame>,<iframe>,<object>, ou<embed>.

Directives de rapport

Les directives de rapport contrôlent l'URL de destination pour les rapports d'enfreinte CSP dansContent-Security-Policy etContent-Security-Policy-Report-Only.

report-to

Fournit au navigateur un jeton identifiant le point de terminaison de rapport ou le groupe de points de terminaison auquel envoyer les informations d'enfreinte CSP. Les points de terminaison représentés par le jeton sont fournis par d'autres en-têtes HTTP, tels queReporting-Endpoints etReport-ToObsolète.

Attention :Cette directive est destinée à remplacerreport-uri ; dans les navigateurs qui prennent en chargereport-to, la directivereport-uri est ignorée.Cependant, tant quereport-to n'est pas largement supportée, il est recommandé de spécifier les deux en-têtes comme illustré (oùnom_point_de_terminaison est le nom d'un point de terminaison fourni séparément) :

http
Content-Security-Policy: …; report-uri https://endpoint.exemple.com; report-to nom_point_de_terminaison

Autres directives

require-trusted-types-for

Implique l'utilisation deTypes de confiance sur les puits d'injection XSS du DOM.

trusted-types

Utilisée pour définir une liste blanche de règles detypes de confiance.Les types de confiance permettent aux applications de verrouiller les puits d'injection XSS du DOM pour n'accepter que des valeurs typées et non falsifiables à la place des chaînes de caractères.

upgrade-insecure-requests

Indique à l'agent utilisateur de traiter 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 (celles servies via HTTPS).Cette directive est destinée aux sites web qui possèdent un grand nombre d'URL historiques non-sécurisées devant être réécrites.

Directives obsolètes

block-all-mixed-contentObsolète

Empêche le chargement de toute ressource via HTTP lorsque la page est chargée avec HTTPS.

report-uriObsolète

Fournit au navigateur une URL où les rapports d'enfreinte CSP doivent être envoyés.Cette directive est remplacée par la directivereport-to.

Syntaxe des directives de récupération

Toutes les directives de récupération peuvent être définies de l'une des façons suivantes :

  • la valeur unique'none', indiquant que le type de ressource concerné doit être complètement bloqué
  • une ou plusieurs valeurs d'expression de source, indiquant les sources valides pour ce type de ressource.

Chaque expression de source prend l'une des formes listées ci-dessous. Notez que toutes les formes ne sont pas applicables à toutes les directives de récupération : consultez la documentation de chaque directive pour savoir quelles formes lui sont applicables.

Les formats<host-source> et<scheme-source> doivent être non entourés de guillemets, et tous les autres formats doivent être entourés de guillemets simples.

nonce-<nonce_value>

Cette valeur consiste en la chaîne de caractèresnonce- suivie d'une valeur denombre unique. La valeur du nonce peut utiliser n'importe quel caractère de laBase64 ou de laBase64 sûre pour les URL.

Cette chaîne de caractères est une valeur aléatoire que le serveur génère pour chaque réponse HTTP. Par exemple :

'nonce-416d1177-4d12-4e3b-b7c9-f6c409789fb8'

Le serveur peut alors inclure cette même valeur comme valeur de l'attributnonce de toute ressource<script> ou<style> qu'il souhaite charger depuis le document.

Le navigateur compare la valeur de la directive CSP avec la valeur de l'attribut de l'élément, et ne charge la ressource que si elles correspondent.

Si une directive contient un nombre unique etunsafe-inline, alors le navigateur ignoreunsafe-inline.

Voir la sectionNombres uniques du guide CSP pour plus d'informations d'utilisation.

Note :Les expressions de source de type nonce ne s'appliquent qu'aux éléments HTML<script> et<style>.

<hash_algorithm>-<hash_value>

Cette valeur consiste en une chaîne de caractères identifiant un algorithme de hachage, suivie de-, puis d'une valeur de hachage. La valeur de hachage peut utiliser n'importe quel caractère de laBase64 ou de laBase64 sûre pour les URL.

  • L'identifiant de l'algorithme de hachage doit être l'un des suivants entresha256,sha384 ousha512.
  • La valeur de hachage est le résultat en base64 de lafonction de hachage d'une ressource<script> ou<style>, calculée à l'aide de l'une des fonctions de hachage suivantes : SHA-256, SHA-384 ou SHA-512.

Par exemple :

'sha256-cd9827ad...'

Lorsque le navigateur reçoit le document, il effectue le hachage du contenu de chaque élément<script> et<style>, compare le résultat avec les hachages présents dans la directive CSP, et ne charge la ressource que s'il y a correspondance.

Si l'élément charge une ressource externe (par exemple, via l'attributsrc), alors l'élément doit également avoir l'attributintegrity renseigné.

Si une directive contient une valeur de hachage etunsafe-inline, alors le navigateur ignoreunsafe-inline.

Voir la sectionHachages du guide CSP pour plus d'informations d'utilisation.

Note :Les expressions de source de type hachage ne s'appliquent qu'aux éléments HTML<script> et<style>.

<host-source>

UneURL ou adresse IP d'unhôte qui est une source valide pour la ressource.

Le schéma, le numéro de port et le chemin sont optionnels.

Si le schéma est omis, celui de l'origine du document est utilisé.

Lors de la comparaison des schémas, les mises à niveau sécurisées sont autorisées. Par exemple :

  • http://exemple.com autorisera également les ressources provenant dehttps://exemple.com
  • ws://exemple.org autorisera également les ressources provenant dewss://exemple.org.

Les jokers ('*') peuvent être utilisés pour les sous-domaines, l'adresse de l'hôte et le numéro de port, indiquant que toutes les valeurs légales de chacun sont valides. Par exemple :

  • http://*.exemple.com autorise les ressources provenant de n'importe quel sous-domaine deexemple.com, en HTTP ou HTTPS.

Les chemins qui se terminent par/ correspondent à tout chemin dont ils sont le préfixe. Par exemple :

  • exemple.com/api/ autorisera les ressources provenant deexemple.com/api/users/new.

Les chemins qui ne se terminent pas par/ sont comparés exactement. Par exemple :

  • https://exemple.com/file.js autorise les ressources provenant dehttps://exemple.com/file.js mais pas dehttps://exemple.com/file.js/file2.js.

<scheme-source>

Unschéma, tel quehttps:. Les deux-points sont obligatoires.

Les mises à niveau sécurisées sont autorisées, donc :

  • http: autorisera également les ressources chargées en HTTPS
  • ws: autorisera également les ressources chargées en WSS.

self

Les ressources du type donné ne peuvent être chargées que depuis la mêmeorigine que le document.

Les mises à niveau sécurisées sont autorisées. Par exemple :

  • Si le document est servi depuishttp://exemple.com, alors une CSP avec'self' autorisera également les ressources provenant dehttps://exemple.com.
  • Si le document est servi depuisws://exemple.org, alors une CSP avec'self' autorisera également les ressources provenant dewss://exemple.org.

trusted-types-eval

Par défaut, si une CSP contient une directivedefault-src ouscript-src, alors les fonctions JavaScript qui évaluent leurs arguments comme du JavaScript sont désactivées.Cela incluteval(), l'argumentcode desetTimeout(), ou le constructeurFunction().

Le mot-clétrusted-types-eval peut être utilisé pour annuler cette protection, mais uniquement lorsque lesTypes de confiance sont appliqués et transmis à ces fonctions à la place de chaînes de caractères.Cela permet l'évaluation dynamique de chaînes de caractères comme JavaScript, mais seulement après que les entrées ont été transmises à une fonction de transformation avant injection, ce qui permet denettoyer l'entrée pour supprimer tout balisage potentiellement dangereux.

Le mot-clétrusted-types-eval doit être utilisé à la place de'unsafe-eval' lors de l'utilisation de ces méthodes avec des types de confiance.Cela garantit que l'accès à ces méthodes est bloqué sur les navigateurs qui ne prennent pas en charge les types de confiance.

Note :Il convient d'éviter d'utilisertrusted-types-eval ou ces méthodes sauf si cela est absolument nécessaire.Les types de confiance garantissent que l'entrée passe par une fonction de transformation — ils ne garantissent pas que la transformation rend l'entrée sûre (et cela peut être très difficile à réaliser correctement).

Voir la sectioneval() et API similaires du guide CSP pour plus d'informations d'utilisation.

unsafe-eval

Par défaut, si une CSP contient une directivedefault-src ouscript-src, alors les fonctions JavaScript qui évaluent leurs arguments comme du JavaScript sont désactivées.Cela incluteval(), l'argumentcode desetTimeout(), ou le constructeurFunction().

Le mot-cléunsafe-eval peut être utilisé pour annuler cette protection, permettant l'évaluation dynamique de chaînes de caractères comme JavaScript.

Attention :Les développeur·euse·s doivent éviter d'utiliser'unsafe-eval', car cela annule en grande partie l'intérêt d'une CSP.'trusted-types-eval' offre une alternative « potentiellement » plus sûre si l'utilisation de ces méthodes est nécessaire.

Voir la sectioneval() et API similaires du guide CSP pour plus d'informations d'utilisation.

wasm-unsafe-eval

Par défaut, si une CSP contient une directivedefault-src ouscript-src, alors une page ne pourra pas compiler du WebAssembly à l'aide de fonctions commeWebAssembly.compileStreaming().

Le mot-cléwasm-unsafe-eval peut être utilisé pour annuler cette protection. Il s'agit d'une alternative bien plus sûre à'unsafe-eval', car cela n'active pas l'évaluation générale du JavaScript.

unsafe-inline

Par défaut, si une CSP contient une directivedefault-src ouscript-src, alors le JavaScript en ligne n'est pas autorisé à s'exécuter. Cela inclut :

  • les balises<script> en ligne
  • les attributs de gestionnaire d'évènements en ligne
  • les URL#"/fr/docs/Web/API/HTMLElement/style" title="style">style.

Le mot-cléunsafe-inline peut être utilisé pour annuler cette protection, permettant à toutes ces formes d'être chargées.

Attention :Les développeur·euse·s doivent éviter'unsafe-inline', car cela annule en grande partie l'intérêt d'une CSP.

Voir la sectionJavaScript en ligne du guide CSP pour plus d'informations d'utilisation.

unsafe-hashes

Par défaut, si une CSP contient une directivedefault-src ouscript-src, alors les attributs de gestionnaire d'évènements en ligne commeonclick et les attributsstyle en ligne ne sont pas autorisés à s'exécuter.

L'expression'unsafe-hashes' permet au navigateur d'utiliser desexpressions de hachage pour les gestionnaires d'évènements en ligne et les attributsstyle. Par exemple, une CSP peut contenir une directive comme :

http
script-src 'unsafe-hashes' 'sha256-cd9827ad...'

Si la valeur de hachage correspond au hachage de la valeur d'un attribut de gestionnaire d'évènements en ligne ou d'un attributstyle, alors le code sera autorisé à s'exécuter.

Attention :La valeur'unsafe-hashes' n'est pas sûre.

En particulier, cela permet une attaque dans laquelle le contenu de l'attribut de gestionnaire d'évènements en ligne est injecté dans le document comme un élément<script> en ligne. Supposons que le gestionnaire d'évènements en ligne soit :

html
<button>Transférer tout mon argent</button>

Si un·e attaquant·e peut injecter un élément<script> en ligne contenant ce code, la CSP autorisera son exécution automatiquement.

Cependant,'unsafe-hashes' est bien plus sûr que'unsafe-inline'.

inline-speculation-rules

Par défaut, si une CSP contient une directivedefault-src ouscript-src, alors le JavaScript en ligne n'est pas autorisé à s'exécuter. L'expression'inline-speculation-rules' permet au navigateur de charger des éléments<script> en ligne qui ont un attributtype despeculationrules.

Voir la sectionAPI Speculation Rules pour plus d'informations.

strict-dynamic

Le mot-clé'strict-dynamic' fait en sorte que la confiance conférée à un script par unnombre unique ou unhachage s'étende aux scripts que ce script charge dynamiquement, par exemple en créant de nouvelles balises<script> à l'aide deDocument.createElement() puis en les insérant dans le document avecNode.appendChild().

Si ce mot-clé est présent dans une directive, alors les valeurs d'expression de source suivantes sont toutes ignorées :

Voir la sectionLe mot-cléstrict-dynamic du guide CSP pour plus d'informations d'utilisation.

report-sample

Si cette expression est incluse dans une directive contrôlant les scripts ou les styles, et que la directive entraîne le blocage par le navigateur de tout script en ligne, style en ligne ou attribut de gestionnaire d'évènements en ligne, alors lerapport de violation généré par le navigateur contiendra une propriétésample contenant les 40 premiers caractères de la ressource bloquée.

Le CSP dans les workers

En général, lesworkers ne sont pas régis par la politique de sécurité du contenu du document (ou du worker parent) qui les a créés. Pour définir une politique de sécurité du contenu pour le worker, il faut définir un en-tête de réponseContent-Security-Policy pour la requête qui a demandé le script du worker.

L'exception à cette règle concerne le cas où l'origine du script du worker est un identifiant global unique (par exemple, si son URL utilise un schéma de type data ou blob). Dans ce cas, le worker hérite de la politique de sécurité du contenu du document ou du worker qui l'a créé.

Gérer plusieurs politiques de sécurité

Le mécanisme CSP permet d'indiquer plusieurs politiques pour une ressource, notamment via l'en-têteContent-Security-Policy, l'en-têteContent-Security-Policy-Report-Only et l'élément<meta>.

Vous pouvez utiliser l'en-têteContent-Security-Policy plusieurs fois, comme dans l'exemple ci-dessous. Portez une attention particulière à la directiveconnect-src ici. Même si la deuxième politique autorise la connexion, la première politique contientconnect-src 'none'. Ajouter des politiques supplémentairesne peut que restreindre davantage les capacités de la ressource protégée, ce qui signifie qu'aucune connexion ne sera autorisée et, en tant que politique la plus stricte,connect-src 'none' sera appliquée.

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

Exemples

Désactiver le code en ligne non sûr et n'autoriser que les ressources HTTPS

Cet en-tête HTTP définit la politique par défaut pour n'autoriser le chargement des ressources (images, polices, scripts, etc.) qu'en HTTPS.Comme les directivesunsafe-inline etunsafe-eval ne sont pas définies, les scripts en ligne seront bloqués.

http
Content-Security-Policy: default-src https:

Les mêmes restrictions peuvent être appliquées à l'aide de l'élément HTML<meta>.

html
<meta http-equiv="Content-Security-Policy" content="default-src https:" />

Autoriser le code en ligne et les ressources HTTPS, mais désactiver les plugins

Cette politique peut être utilisée sur un site existant qui utilise trop de code en ligne pour être corrigé, afin de s'assurer que les ressources sont chargées uniquement via HTTPS et de désactiver les plugins :

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

Signaler mais ne pas appliquer les violations lors des tests

Cet exemple applique les mêmes restrictions que l'exemple précédent, mais utilise l'en-têteContent-Security-Policy-Report-Only et la directivereport-to.Cette approche est utilisée lors des tests pour signaler les violations sans bloquer l'exécution du code.

Les points de terminaison (URL) vers lesquels envoyer les rapports sont définis à l'aide de l'en-tête de réponse HTTPReporting-Endpoints.

http
Reporting-Endpoints: csp-endpoint="https://example.com/csp-reports"

Un point de terminaison particulier est ensuite sélectionné comme cible de rapport dans la politique CSP à l'aide de la directivereport-to.

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

Notez que la directivereport-uriObsolète est également définie ci-dessus carreport-to n'est pas encore largement pris en charge par les navigateurs.

VoirMise en œuvre de la Content Security Policy (CSP) pour plus d'exemples.

Spécifications

Specification
Content Security Policy Level 3
# csp-header

Compatibilité des navigateurs

Voir aussi

Help improve MDN

Learn how to contribute

Cette page a été modifiée le par lescontributeurs du MDN.


[8]ページ先頭

©2009-2026 Movatter.jp