Cet article nécessite une relecture rédactionnelle. Voici comment vous pouvez aider.
Cette traduction est incomplète. Aidez à traduire cet article depuis l'anglais.
Les administrateurs de site web peuvent définir de nombreux paramètres contrôlant la politique de sécurité à l'aide des politiques de sécurité de contenu (Content Security Policy ou CSP). Toutes les combinaisons de ces dernières peuvent être utilisées pour répondre aux besoins de votre site web ; cependant il n'est pas nécessaire de toutes les spécifier.
Sources de contenu
La plupart des directives de sécurité requièrent une ou plusieurs sources de contenu. Une source de contenu est une chaine de caractère indiquant les origines possibles pour les contenus du site web.
Liste de sources
Une liste de sources est une chaine de caractères spécifiant l'adresse d'une ou plusieurs hôtes Internet par leur nom ou par leur adresse IP, ainsi qu'optionnellement un schéma d'URL (tel que http:
) et/ou un numéro de port. L'adresse d'un hôte Internet peut être préfixée par un caractère de remplacement (ou wildcard, un caractère astérisque '*'), de même que pour le numéro de port (à nouveau '*'), indiquant ainsi que tous les ports possibles sont valides pour la source. La liste des hôtes est délimitée par des espaces.
La liste des hôtes valides inclut :
- https://*.example.com
- Détecte toutes tentatives de chargement depuis n'importe lequel des sous-domaines d'
exemple.com
utilisant le schéma d'URLhttp:
. - mail.example .com:443
- Détecte toutes tentatives d'accès au port 443 sur l'hôte
mail.example.com
. - https://store.example.com
- Détecte toutes tentatives d'accès à
store.example.com
en utilisant le schema d'URLhttps:
.
Si un numéro de port n'est pas spécifié, le navigateur utilisera le numéro de port par défaut pour le schéma d'URL spécifié. Si aucun schéma d'URL est spécifié, le même schéma d'URL que celui utilisé pour accéder au document protégé est utilisé.
Mots clefs
Il existe également quelques mots clefs disponibles pour décrire des classes spéciales de source de contenu :
'none'
- Désigne un ensemble vide : aucune URL ne peut correspondre. Les guillemets simples sont requis.
'self'
- Se réfère à l'origine depuis laquelle le document protégé est servi, avec le même schéma d'URL et le même numéro de port. Les guillemets simples sont requis. Certains navigateurs exclus spécifiquement des directives de source
blob
etfilesystem
. Les sites nécessitant l'autorisation de ces types de contenu peuvent les spécifier en utilisant un attributdata
(Data attribute).
'unsafe-inline'
- Autorise l'utilisation de ressources en ligne telle que les balises
<script>
en ligne, les URLsjavascript:
, les attributs d'évènement en ligne, et les balises<style>
en ligne. Les guillemets simples sont requis. 'unsafe-eval'
- Autorise l'utilisation de
eval()
et autres méthodes similaires pour la création de code depuis des chaines de caractères. Les guillemets simples sont requis.
'unsafe-inline'
et 'unsafe-eval'
sont dangereux et peuvent rendre vulnérable votre site web aux attaques de type cross-site scripting (XSS)Par exemple, vous pouvez spécifier que des contenus peuvent être chargés depuis l'origine du document ainsi que par trustedscripts.example.com
:
Content-Security-Policy: default-src 'self' trustedscripts.example.com
La directive default-src
est décrite plus loin.
Data
data:
sont dangereux et peuvent rendre vulnérable votre site web aux attaques de type cross-site scripting (XSS).- data:
- Autorise les URIs
data:
à être utilisés comme source de contenu. Cela est dangereux : un attaquant peut également injecter des URIsdata:
. Utilisez cela avec parcimonie et certainement pas pour des scripts. - mediastream:
- Autorise les
URIs
mediastream:
à être utilisés comme source de contenu. - blob:
- Autorise les URIs
blob:
à être utilisés comme source de contenu. - filesystem:
- Autorise les URIs
filesystem:
à être utilisés comme source de contenu.
Content-Security-Policy: default-src 'self'; img-src 'self' data: blob: filesystem:; media-src mediastream:
Directives de politique de sécurité supportées
The following policy directives are available to control the security policy for the various policy areas.
base-uri
The base-uri
directive defines the URIs that a user agent may use as the document base URL. If this value is absent, then any URI is allowed. If this directive is absent, the user agent will use the value in the base
element.
base-uri source-list
child-src
The child-src
directive defines the valid sources for web workers and nested browsing contexts loaded using elements such as <frame>
and <iframe>
. This directive is preferred over the frame-src
directive, which is deprecated. For workers, non-compliant requests are treated as fatal network errors by the user agent.
default-src
directive.child-src source-list
connect-src
The connect-src
directive defines valid sources for Fetch, XMLHttpRequest
, WebSocket, and EventSource connections.
default-src
directive.xhr-src
was used in place of the connect-src
directive and only restricted the use of XMLHttpRequest
.connect-src
source-list
default-src
The default-src
directive defines the security policy for types of content which are not expressly called out by more specific directives. This directive covers the following directives:
child-src
connect-src
font-src
img-src
manifest-src
media-src
object-src
script-src
style-src
default-src
source-list
font-src
The font-src
directive specifies valid sources for fonts loaded using @font-face
.
default-src
directive.font-src
source-list
form-action
The form-action
directive specifies valid endpoints for <form>
submissions.
form-action
source-list
frame-ancestors
The frame-ancestors
directive specifies valid parents that may embed a page using the <frame>
and <iframe>
elements. This directive is not supported in the <meta>
element or by the Content-Security-Policy-Report-Only
header field.
frame-ancestors
source-list
frame-src
The frame-src
directive specifies valid sources for web workers and nested browsing contexts loading using elements such as <frame>
and <iframe>
.
child-src
instead, unless you are supporting browsers that use CSP 1.0 only (e.g. Safari 9).frame-src source-list
img-src
The img-src
directive specifies valid sources of images and favicons.
default-src
directive.img-src
source-list
manifest-src
The manifest-src
directive specifies which manifest can be applied to the resource.
default-src
directive.manifest-src
source-list
media-src
The media-src
directive specifies valid sources for loading media using the <audio>
and <video>
elements.
default-src
directive.media-src
source-list
object-src
The object-src
directive specifies valid sources for the <object>
, <embed>
, and <applet>
elements.
default-src
directive.object-src
source-list
plugin-types
The plugin-types
directive specifies the valid plugins that the user agent may invoke.
plugin-types type-list
referrer
The referrer
directive specifies information in the referer (sic) header for links away from a page. Valid values are no-referrer
, no-referrer-when-downgrade
, origin
, origin-when-cross-origin
, and unsafe-url
.
referrer value
reflected-xss
The reflected-xss
directive instructs a user agent to activate or deactivate any heuristics used to filter or block reflected cross-site scripting attacks. Valid values are allow
, block
, and filter
. This directive is not supported in the <meta>
element.
meta
element.reflected-xss value
report-uri
The report-uri
directive instructs the user agent to report attempts to violate the Content Security Policy. These violation reports consist of JSON documents sent via an HTTP POST
request to the specified URI. See Using CSP violation reports for details. This directive is not supported in the <meta>
element.
report-uri
uri
report-uri
as the content being protected by Content Security Policy.sandbox
The sandbox
directive applies restrictions to a page's actions including preventing popups, preventing the execution of plugins and scripts, and enforcing a same-origin policy. This directive is not supported in the <meta>
element or by the Content-Security-policy-Report-Only
header field.
sandbox value
script-src
The script-src
directive specifies valid sources for JavaScript. When either the script-src
or the default-src
directive is included, inline script and eval()
are disabled unless you specify 'unsafe-inline' and 'unsafe-eval', respectively. In Chrome 49 and later, 'script-src http' will match both HTTP and HTTPS.
default-src
directive.script-src
source-list
strict-dynamic
The strict-dynamic
directive specifies that the trust explicitly given to a script present in the markup, by accompanying it with a nonce or a hash, shall be propogated to all the scripts loaded by that root script. At the same time, any whitelist or source expressions such as 'self'
or 'unsafe-inline'
will be ignored. For example, a policy such as script-src 'strict-dynamic' 'nonce-R4nd0m' https://whitelisted.com/
would allow loading of a root script with <script nonce="R4nd0m" src="https://example.com/loader.js">
and propogate that trust to any script loaded by loader.js
, but disallow loading scripts from https://whitelisted.com/
.
script-src 'strict-dynamic' 'nonce-someNonce'
Or
script-src 'strict-dynamic' 'sha256-hash'
It is possible to deploy strict-dynamic
in a backwards compatible way, without requiring user-agent sniffing.
The policy:
script-src 'unsafe-inline' https: 'nonce-abcdefg' 'strict-dynamic'
will act like'unsafe-inline' https:
in browsers that support CSP1, https: 'nonce-abcdefg'
in browsers that support CSP2, and 'nonce-abcdefg' 'strict-dynamic'
in browsers that support CSP3.
style-src
The style-src
directive specifies valid sources for stylesheets. This includes both externally-loaded stylesheets and inline use of the <style>
element and HTML style
attributes. Stylesheets from sources that aren't included in the source list are not requested or loaded. When either the style-src
or the default-src
directive is included, inline use of the <style>
element and HTML style
attributes are disabled unless you specify 'unsafe-inline'.
default-src
directive.style-src
source-list
upgrade-insecure-requests
The upgrade-insecure-requests
directive instructs user agents to treat all of a site's unsecure URL's (those serverd over HTTP) as though they have been replaced with secure URL's (those served over HTTPS). This directive is intended for web sites with large numbers of unsecure legacy URL's that need to be rewritten.
Specifications
Specification | Status | Comment |
---|---|---|
Content Security Policy Level 3 | Brouillon de l'éditeur | Adds strict-dynamic . |
Referrer Policy | Version de travail | Adds values for the referrer policy. |
Upgrade Insecure Requests | Candidat au statut de recommandation | Adds upgrade-insecure-requests . |
Content Security Policy Level 2 | Candidat au statut de recommandation | Adds base-uri , child-src , form-action , frame-ancestors , plugin-types , referrer , reflected-xss , and report-uri . Deprecates frame-src . |
Content Security Policy 1.0 | Candidat au statut de recommandation | Defines connect-src , default-src , font-src , frame-src , img-src , media-src , object-src , report-uri, sandbox , script-src, and style-src . |
Browser compatibility
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Edge | Opera | Safari |
---|---|---|---|---|---|---|
Basic support | 14.0[4] 25.0 45.0[2] |
4.0 (2.0)[5] 23.0 (23.0) |
Pas de support | 12 | 15 | 6[4] 7 |
base-uri |
40.0 | 35.0 (35.0) | ? | ? | ? | ? |
child-src |
(Oui) | 45.0 (45.0) | ? | ? | ? | ? |
connect-src |
(Oui) | 23.0 (23.0)[6] | ? | ? | ? | ? |
default-src |
(Oui) | 23.0 (23.0) | ? | ? | ? | ? |
font-src |
(Oui) | 23.0 (23.0) | ? | ? | ? | ? |
form-action |
40.0 | 36.0 (36.0) | ? | ? | ? | ? |
frame-ancestors |
40.0 | 33.0 (33.0) | ? | ? | ? | ? |
frame-src |
(Oui) | ? | ? | ? | ? | ? |
img-src |
(Oui) | 23.0 (23.0) | ? | ? | ? | ? |
manifest-src |
(Oui) | 41.0 (41.0) | ? | ? | ? | ? |
media-src |
(Oui) | 23.0 (23.0) | ? | ? | ? | ? |
object-src |
(Oui) | 23.0 (23.0) | ? | ? | ? | ? |
plugin-types |
40.0 | Pas de support | ? | ? | ? | ? |
referrer |
(Oui)[3] | 37.0 (37.0) | ? | ? | ? | ? |
reflected-xss |
(Oui) | Pas de support | ? | ? | ? | ? |
report-uri |
40.0 | ? | ? | ? | ? | ? |
sandbox |
(Oui) | 50.0 (50.0) | 10[5] | ? | ? | ? |
script-src |
(Oui) | 23.0 (23.0) | ? | ? | ? | ? |
strict-dynamic |
52.0 | ? | ? | ? | 39 | ? |
style-src |
(Oui) | 23.0 (23.0) | ? | ? | ? | ? |
upgrade-insecure-requests |
43.0 | 42.0 (42.0) | Pas de support | Pas de support | 30 | Pas de support |
Feature | Android Browser | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
Basic support | (Oui)[1] | (Oui) 45.0[2] |
4.0 (2.0) | ? | ? | 7.1 | (Oui) 45.0[2] |
base-uri |
Pas de support | 40.0 | 35.0 (35.0) | ? | ? | ? | 40.0 |
child-src |
Pas de support | 40.0 | Pas de support | ? | ? | ? | 40.0 |
connect-src |
? | (Oui) | 23.0 (23.0)[6] | ? | ? | ? | (Oui) |
default-src |
? | (Oui) | Pas de support | ? | ? | ? | (Oui) |
font-src |
? | (Oui) | Pas de support | ? | ? | ? | (Oui) |
form-action |
Pas de support | 40.0 | 36.0 (36.0) | ? | ? | ? | 40.0 |
frame-ancestors |
Pas de support | 40.0 | 33.0 (33.0) | ? | ? | ? | 40.0 |
frame-src |
? | (Oui) | Pas de support | ? | ? | ? | (Oui) |
img-src |
? | (Oui) | Pas de support | ? | ? | ? | (Oui) |
manifest-src |
? | ? | 41.0 (41.0) | ? | ? | ? | ? |
media-src |
? | (Oui) | Pas de support | ? | ? | ? | (Oui) |
object-src |
? | (Oui) | Pas de support | ? | ? | ? | (Oui) |
plugin-types |
Pas de support | 40.0 | Pas de support | ? | ? | ? | 40.0 |
referrer |
?[3] | (Oui) | 37.0 (37.0) | ? | ? | ? | (Oui)[3] |
reflected-xss |
? | (Oui) | Pas de support | ? | ? | ? | (Oui) |
report-uri |
Pas de support | 40.0 | Pas de support | ? | ? | ? | 40.0 |
sandbox |
? | (Oui) | 50.0 (50.0) | ? | ? | ? | (Oui) |
script-src |
? | (Oui) | Pas de support | ? | ? | ? | (Oui) |
strict-dynamic |
Pas de support | 52.0 | ? | ? | 39 | ? | 52.0 |
style-src |
? | (Oui) | Pas de support | ? | ? | ? | (Oui) |
upgrade-insecure-requests |
42.0 (42) | 43.0 | Pas de support | Pas de support | Pas de support | Pas de support | 43.0 |
[1] Deprecated since Android 4.0.
[2] Starting with version 45.0, Chrome excludes blob
and filesystem
from source directives. Sites needing to allow these content types can specify them using the Data attribute.
[3] Starting with Chrome 45, the referrer policy is constrained to the values defined in the Referrer Policy specification.
[4] Implemented as X-Webkit-CSP
header.
[5] Implemented as X-Content-Security-Policy
header.
[6] Prior to Firefox 50, the ping
attribute of <a>
element wasn't abiding by it.