L' nonce
attribut vous permet de «mettre sur liste blanche» certains éléments script
et style
éléments en ligne, tout en évitant l'utilisation de la unsafe-inline
directive 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
/ style
en général.
Ainsi, l' nonce
attribut 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' nonce
attribut, 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 style
vous souhaitez «ajouter à la liste blanche», faites en sorte que votre code backend insère un nonce
attribut 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-src
ou 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 script
ou que style
vous 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 nonce
attribut 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
.