L' nonceattribut vous permet de «mettre sur liste blanche» certains éléments scriptet styleéléments en ligne, tout en évitant l'utilisation de la unsafe-inlinedirective CSP (qui autoriserait tous les éléments script/ en ligne style), de sorte que vous conserviez toujours la fonctionnalité clé du CSP consistant à interdire les éléments en ligne script/ styleen général.
Ainsi, l' nonceattribut est un moyen d'indiquer aux navigateurs que le contenu en ligne d'un script ou d'un élément de style particulier n'a pas été injecté dans le document par un tiers (malveillant), mais a été placé dans le document intentionnellement par celui qui contrôle le serveur sur lequel le document est servi. de.
https://developers.google.com/web/fundamentals/security/csp/#if_you_absolutely_must_use_it donne un bon exemple d'utilisation de l' nonceattribut, qui se résume aux étapes suivantes:
- Pour chaque demande que votre serveur Web reçoit pour un document particulier, demandez à votre backend de générer une chaîne aléatoire codée en base64 d'au moins 128 bits de données à partir d'un générateur de nombres aléatoires sécurisé par cryptographie; par exemple - EDNnf03nceIOfn39fn3e9h3sdfa. C'est votre nonce.
 
- Prenez le nonce généré à l'étape 1, et pour tout élément en ligne - script/ que- stylevous souhaitez «ajouter à la liste blanche», faites en sorte que votre code backend insère un- nonceattribut dans le document avant qu'il ne soit envoyé sur le fil, avec ce nonce comme valeur:
 - <script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">…</script>
 
- Prenez le nonce généré à l'étape 1, ajoutez- - nonce-y le préfixe et faites en sorte que votre backend génère un en-tête CSP avec celui parmi les valeurs de la liste source pour- script-srcou- style-src:
 - Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'
 
Ainsi, le mécanisme d'utilisation d'un nonce est une alternative à la place que votre backend génère un hachage du contenu de l'inline scriptou que stylevous souhaitez autoriser, puis en spécifiant ce hachage dans la liste source appropriée de votre en-tête CSP.
Notez que comme les navigateurs ne vérifient pas (ne peuvent pas) vérifier que la valeur nonce envoyée change entre les requêtes de page, il est possible - bien que totalement déconseillé - d'ignorer 1 ci-dessus et de ne pas laisser votre backend faire quoi que ce soit dynamiquement pour le nonce, auquel cas vous pourrait simplement mettre un nonceattribut avec une valeur statique dans la source HTML de votre document, et envoyer un en-tête CSP statique avec cette même valeur nonce.
Mais la raison pour laquelle vous ne voudriez pas utiliser un nonce statique de cette manière est que cela irait pratiquement à l'encontre de l'objectif de l'utilisation du nonce du tout pour commencer - parce que, si vous deviez utiliser un nonce statique comme celui-là, à ce stade, vous pourriez aussi bien utiliser unsafe-inline.