diff options
Diffstat (limited to 'files/fr/web/http/headers/content-security-policy/script-src')
| -rw-r--r-- | files/fr/web/http/headers/content-security-policy/script-src/index.md | 211 |
1 files changed, 106 insertions, 105 deletions
diff --git a/files/fr/web/http/headers/content-security-policy/script-src/index.md b/files/fr/web/http/headers/content-security-policy/script-src/index.md index a6b2659ae9..03f6414e8c 100644 --- a/files/fr/web/http/headers/content-security-policy/script-src/index.md +++ b/files/fr/web/http/headers/content-security-policy/script-src/index.md @@ -15,162 +15,163 @@ tags: - source translation_of: Web/HTTP/Headers/Content-Security-Policy/script-src --- -<div>{{HTTPSidebar}}</div> +{{HTTPSidebar}} -<p>La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) <code><strong>script-src</strong></code> spécifie les sources valides pour du code JavaScript. Cela inclut non seulement les URL chargées directement par les éléments {{HTMLElement("script")}}, mais aussi les scripts embarqués, les attributs de gestion d'évènements (<code>onclick</code>) et <a href="/en-US/docs/Web/XSLT">les feuilles de style XSLT</a> pouvant déclencher l'exécution de scripts.</p> +La directive HTTP {{HTTPHeader("Content-Security-Policy")}} (CSP) **`script-src`** spécifie les sources valides pour du code JavaScript. Cela inclut non seulement les URL chargées directement par les éléments {{HTMLElement("script")}}, mais aussi les scripts embarqués, les attributs de gestion d'évènements (`onclick`) et [les feuilles de style XSLT](/en-US/docs/Web/XSLT) pouvant déclencher l'exécution de scripts. <table class="properties"> - <tbody> - <tr> - <th scope="row">Version de CSP</th> - <td>1</td> - </tr> - <tr> - <th scope="row">Type de directive</th> - <td>{{Glossary("Fetch directive")}}</td> - </tr> - <tr> - <th scope="row">{{CSP("default-src")}} par défaut</th> - <td>Oui, si cette directive est absente, l'agent utilisateur consultera la directive <code>default-src</code></td> - </tr> - </tbody> + <tbody> + <tr> + <th scope="row">Version de CSP</th> + <td>1</td> + </tr> + <tr> + <th scope="row">Type de directive</th> + <td>{{Glossary("Fetch directive")}}</td> + </tr> + <tr> + <th scope="row">{{CSP("default-src")}} par défaut</th> + <td> + Oui, si cette directive est absente, l'agent utilisateur consultera la + directive <code>default-src</code> + </td> + </tr> + </tbody> </table> -<h2 id="Syntaxe">Syntaxe</h2> +## Syntaxe -<p>Une ou plusieurs sources peuvent être autorisées pour cette directive :</p> +Une ou plusieurs sources peuvent être autorisées pour cette directive : -<pre class="syntaxbox">Content-Security-Policy: script-src <source>; -Content-Security-Policy: script-src <source> <source>; -</pre> + Content-Security-Policy: script-src <source>; + Content-Security-Policy: script-src <source> <source>; -<h3 id="Sources">Sources</h3> +### Sources -<p>{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}}</p> +{{page("fr/Web/HTTP/Headers/Content-Security-Policy/default-src", "Sources")}} -<h2 id="Exemples">Exemples</h2> +## Exemples -<h3 id="Cas_de_violation">Cas de violation</h3> +### Cas de violation -<p>Soit cet en-tête CSP :</p> +Soit cet en-tête CSP : -<pre class="brush: bash">Content-Security-Policy: script-src https://example.com/</pre> +```bash +Content-Security-Policy: script-src https://example.com/ +``` -<p>Ces scripts seront bloqués et ne seront pas chargés ou exécutés :</p> +Ces scripts seront bloqués et ne seront pas chargés ou exécutés : -<pre class="brush: html"><script src="https://not-example.com/js/library.js"></script></pre> +```html +<script src="https://not-example.com/js/library.js"></script> +``` -<p>Notez que les gestionnaires d'évènements par attributs sont aussi bloqués :</p> +Notez que les gestionnaires d'évènements par attributs sont aussi bloqués : -<pre class="brush: html"><button id="btn" onclick="doSomething()"></pre> +```html +<button id="btn" onclick="doSomething()"> +``` -<p>Vous devez les remplacer par des appels à la méthode {{domxref("EventTarget.addEventListener", "addEventListener")}} :</p> +Vous devez les remplacer par des appels à la méthode {{domxref("EventTarget.addEventListener", "addEventListener")}} : -<pre class="brush: js">document.getElementById("btn").addEventListener('click', doSomething);</pre> +```js +document.getElementById("btn").addEventListener('click', doSomething); +``` -<h3 id="Scripts_embarqués_non_fiables">Scripts embarqués non fiables</h3> +### Scripts embarqués non fiables -<div class="note"> -<p><strong>Note :</strong> Bloquer les styles et scripts embarqués est l'une des stratégies de sécurité majeures que CSP propose. Toutefois, si vous en avez absolument besoin, il existe des mécanismes qui vous permettront de les autoriser.</p> -</div> +> **Note :** Bloquer les styles et scripts embarqués est l'une des stratégies de sécurité majeures que CSP propose. Toutefois, si vous en avez absolument besoin, il existe des mécanismes qui vous permettront de les autoriser. -<p>Vous pouvez autoriser les scripts embarqués et les gestionnaires d'évènements par attributs en spécifiant la valeur <code>'unsafe-inline'</code>, des nonces ou des hashs correspondant au script.</p> +Vous pouvez autoriser les scripts embarqués et les gestionnaires d'évènements par attributs en spécifiant la valeur `'unsafe-inline'`, des nonces ou des hashs correspondant au script. -<pre class="brush: bash">Content-Security-Policy: script-src 'unsafe-inline'; -</pre> +```bash +Content-Security-Policy: script-src 'unsafe-inline'; +``` -<p>Cette directive CSP autorisera tous les scripts {{HTMLElement("script")}} embarqués :</p> +Cette directive CSP autorisera tous les scripts {{HTMLElement("script")}} embarqués : -<pre class="brush: html"><script> +```html +<script> var inline = 1; -</script></pre> +</script> +``` -<p>Vous pouvez aussi utiliser un nonce pour autoriser spécifiquement certains éléments {{HTMLElement("script")}} embarqués :</p> +Vous pouvez aussi utiliser un nonce pour autoriser spécifiquement certains éléments {{HTMLElement("script")}} embarqués : -<pre class="brush: bash">Content-Security-Policy: script-src 'nonce-2726c7f26c'</pre> +```bash +Content-Security-Policy: script-src 'nonce-2726c7f26c' +``` -<p>Vous devrez alors définir ce nonce sur l'élément {{HTMLElement("script")}} :</p> +Vous devrez alors définir ce nonce sur l'élément {{HTMLElement("script")}} : -<pre class="brush: html"><script nonce="2726c7f26c"> +```html +<script nonce="2726c7f26c"> var inline = 1; -</script></pre> +</script> +``` -<p>Autrement, vous pouvez créer des hashs à partir de vos scripts. CSP accepte les algorithmes sha256, sha384 et sha512.</p> +Autrement, vous pouvez créer des hashs à partir de vos scripts. CSP accepte les algorithmes sha256, sha384 et sha512. -<pre class="brush: bash">Content-Security-Policy: script-src 'sha256-B2yPHKaXnvFWtRChIbabYmUBFZdVfKKXHbWtWidDVF8='</pre> +```bash +Content-Security-Policy: script-src 'sha256-B2yPHKaXnvFWtRChIbabYmUBFZdVfKKXHbWtWidDVF8=' +``` -<p>Lors de la génération du hash, vous ne devez pas inclure les balises et tenir compte de la casse et des caractères blancs (espaces, retours à la ligne, etc.).</p> +Lors de la génération du hash, vous ne devez pas inclure les balises et tenir compte de la casse et des caractères blancs (espaces, retours à la ligne, etc.). -<pre class="brush: html"><script>var inline = 1;</script></pre> +```html +<script>var inline = 1;</script> +``` -<h3 id="Expressions_dévaluation_non_fiables">Expressions d'évaluation non fiables</h3> +### Expressions d'évaluation non fiables -<p>La valeur <code>'unsafe-eval'</code> contrôle différents méthodes qui créent du code JavaScript à partir de chaines de caractères. Si <code>'unsafe-eval'</code> n'est pas spécifiée avec la directive <code>script-src</code>, ces méthodes seront bloquées et n'auront aucun effet :</p> +La valeur `'unsafe-eval'` contrôle différents méthodes qui créent du code JavaScript à partir de chaines de caractères. Si `'unsafe-eval'` n'est pas spécifiée avec la directive `script-src`, ces méthodes seront bloquées et n'auront aucun effet : -<ul> - <li>{{jsxref("eval", "eval()")}}</li> - <li>{{jsxref("Function", "Function()")}}</li> - <li>En passant une chaine à des méthodes tel que : <code>window.setTimeout("alert(\"Hello World!\");", 500);</code> - <ul> - <li>{{domxref("window.setTimeout")}}</li> - <li>{{domxref("window.setInterval")}}</li> - <li>{{domxref("window.setImmediate")}}</li> - </ul> - </li> - <li>{{domxref("window.execScript")}} {{non-standard_inline}} (IE10 et versions précédentes)</li> -</ul> +- {{jsxref("eval", "eval()")}} +- {{jsxref("Function", "Function()")}} +- En passant une chaine à des méthodes tel que : `window.setTimeout("alert(\"Hello World!\");", 500);` -<h3 id="strict-dynamic">strict-dynamic</h3> + - {{domxref("window.setTimeout")}} + - {{domxref("window.setInterval")}} + - {{domxref("window.setImmediate")}} -<p>La valeur <code>'strict-dynamic'</code> spécifie que la confiance explicitement donnée à un script de la page, par le biais d'un nonce ou d'un hash, doit être propagée à tous les scripts chargés par celui-ci. En conséquence, toute liste de permissions ou expressions de sources telles que <code>'self'</code> ou <code>'unsafe-inline'</code> sont ignorées. Par exemple, une règle telle que <code>script-src 'strict-dynamic' 'nonce-R4nd0m' https://whitelisted.com/</code> autoriserait le chargement de scripts comme <code><script nonce="R4nd0m" src="https://example.com/loader.js"></code> et s'appliquerait ensuite à tous les scripts chargés par <code>loader.js</code>, mais interdirait les scripts chargés depuis <code>https://whitelisted.com/</code> à moins qu'ils soient accompagnés d'un nonce ou chargés depuis un script dont la source est de confiance.</p> +- {{domxref("window.execScript")}} {{non-standard_inline}} (IE10 et versions précédentes) -<pre class="brush: bash">script-src 'strict-dynamic' 'nonce-<em>someNonce</em>'</pre> +### strict-dynamic -<p><em>Ou</em></p> +La valeur `'strict-dynamic'` spécifie que la confiance explicitement donnée à un script de la page, par le biais d'un nonce ou d'un hash, doit être propagée à tous les scripts chargés par celui-ci. En conséquence, toute liste de permissions ou expressions de sources telles que `'self'` ou `'unsafe-inline'` sont ignorées. Par exemple, une règle telle que `script-src 'strict-dynamic' 'nonce-R4nd0m' https://whitelisted.com/` autoriserait le chargement de scripts comme `<script nonce="R4nd0m" src="https://example.com/loader.js">` et s'appliquerait ensuite à tous les scripts chargés par `loader.js`, mais interdirait les scripts chargés depuis `https://whitelisted.com/` à moins qu'ils soient accompagnés d'un nonce ou chargés depuis un script dont la source est de confiance. -<pre class="brush: bash">script-src 'strict-dynamic' 'sha256-<em>base64EncodedHash</em>'</pre> +```bash +script-src 'strict-dynamic' 'nonce-someNonce' +``` -<p>Il est possible de déployer <code>strict-dynamic</code> de manière rétrocompatible, sans chercher à connaitre l'agent utilisateur. Cette directive :</p> +_Ou_ -<pre class="brush: bash">script-src 'unsafe-inline' https: 'nonce-abcdefg' 'strict-dynamic'</pre> +```bash +script-src 'strict-dynamic' 'sha256-base64EncodedHash' +``` -<p>fonctionnera comme <code>'unsafe-inline' https:</code> pour les navigateurs supportant CSP1, <code>https: 'nonce-abcdefg'</code> pour ceux supportant CSP2 et comme <code>'nonce-abcdefg' 'strict-dynamic'</code> pour ceux supportant CSP3.</p> +Il est possible de déployer `strict-dynamic` de manière rétrocompatible, sans chercher à connaitre l'agent utilisateur. Cette directive : -<h2 id="Spécifications">Spécifications</h2> +```bash +script-src 'unsafe-inline' https: 'nonce-abcdefg' 'strict-dynamic' +``` -<table class="standard-table"> - <thead> - <tr> - <th scope="col">Spécification</th> - <th scope="col">Statut</th> - <th scope="col">Commentaire</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{specName("CSP 3.0", "#directive-script-src", "script-src")}}</td> - <td>{{Spec2('CSP 3.0')}}</td> - <td>Inchangé.</td> - </tr> - <tr> - <td>{{specName("CSP 1.1", "#directive-script-src", "script-src")}}</td> - <td>{{Spec2('CSP 1.1')}}</td> - <td>Initial definition.</td> - </tr> - </tbody> -</table> +fonctionnera comme `'unsafe-inline' https:` pour les navigateurs supportant CSP1, `https: 'nonce-abcdefg'` pour ceux supportant CSP2 et comme `'nonce-abcdefg' 'strict-dynamic'` pour ceux supportant CSP3. -<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2> +## Spécifications +| Spécification | Statut | Commentaire | +| ------------------------------------------------------------------------------------ | ---------------------------- | ------------------- | +| {{specName("CSP 3.0", "#directive-script-src", "script-src")}} | {{Spec2('CSP 3.0')}} | Inchangé. | +| {{specName("CSP 1.1", "#directive-script-src", "script-src")}} | {{Spec2('CSP 1.1')}} | Initial definition. | +## Compatibilité des navigateurs -<p>{{Compat("http.headers.csp.Content-Security-Policy.script-src")}}</p> +{{Compat("http.headers.csp.Content-Security-Policy.script-src")}} -<h2 id="Voir_aussi">Voir aussi</h2> +## Voir aussi -<ul> - <li>{{HTTPHeader("Content-Security-Policy")}}</li> - <li>{{HTMLElement("script")}}</li> - <li>{{CSP("script-src-elem")}}</li> - <li>{{CSP("script-src-attr")}}</li> -</ul> +- {{HTTPHeader("Content-Security-Policy")}} +- {{HTMLElement("script")}} +- {{CSP("script-src-elem")}} +- {{CSP("script-src-attr")}} |
