Le site nonce
vous permet d'établir une liste blanche de certains éléments en ligne. script
y style
tout en évitant l'utilisation des éléments CSP unsafe-inline
(qui permettrait à todo en ligne script
/ style
), de sorte que vous conservez la caractéristique clé de CSP, qui consiste à interdire l'utilisation d'instructions en ligne. script
/ style
en général.
Ainsi, le nonce
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 qu'il a été placé intentionnellement dans le document par la personne qui contrôle le serveur à partir duquel le document est servi.
Les fondamentaux du Web Politique de sécurité du contenu de l'article _Si vous devez absolument l'utiliser..._ contient un bon exemple de l'utilisation de l'option nonce
ce qui revient à suivre les étapes suivantes :
-
Pour chaque demande que votre serveur Web reçoit pour un document particulier, demandez à votre backend de créer une chaîne aléatoire codée en base64 d'au moins 128 bits à partir d'un générateur de nombres aléatoires sécurisé sur le plan cryptographique ; par exemple, EDNnf03nceIOfn39fn3e9h3sdfa
. C'est votre nonce.
-
Prenez le nonce généré à l'étape 1, et pour tout inline script
/ style
que vous voulez mettre sur une "liste blanche", faites en sorte que votre code backend insère un nonce
dans le document avant qu'il ne soit envoyé sur le réseau, avec ce nonce comme valeur :
<script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">…</script>
-
Prenez le nonce généré à l'étape 1, précédez-le de l'expression "nonce". nonce-
et faites en sorte que votre backend génère un en-tête CSP avec cette valeur parmi les valeurs de la liste des sources pour l'option script-src
o style-src
:
Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'
Le mécanisme d'utilisation d'un nonce est donc une alternative à la génération par votre backend d'un hash du contenu du fichier inline script
o style
que vous souhaitez autoriser, puis en spécifiant ce hachage dans la liste de sources appropriée de votre en-tête CSP.
Remarque : les navigateurs ne vérifient pas (ne peuvent pas vérifier) que les valeurs de nonce envoyées par les serveurs changent réellement entre les requêtes de page ; il est donc possible - bien que totalement déconseillé - d'ignorer le point 1 ci-dessus et de faire en sorte que votre backend ne fasse rien dynamiquement pour le nonce, auquel cas vous pouvez simplement mettre un fichier nonce
avec une valeur statique dans la source HTML de votre document, et envoyez 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 façon est que cela irait à l'encontre de l'objectif d'utiliser le nonce pour commencer - parce que, si vous deviez utiliser un nonce statique comme ça, à ce moment-là, vous pourriez tout aussi bien utiliser simplement unsafe-inline
.
En ce qui concerne les éléments qui sont "non-cachables" : La spécification CSP limite actuellement les navigateurs à vérifier les nonces uniquement pour les éléments suivants script
y style
éléments. Voici les détails de la fiche technique :
5 votes
Il semble qu'il s'agisse d'un élément de sécurité supplémentaire pour votre site. Vous l'ajoutez à un lien ou à un formulaire et lorsque la page est servie, si le nonce ne correspond pas au vôtre, la page n'est pas servie.
0 votes
@Pete Vous voulez dire qu'alors personne ne pourrait charger votre
script
ystyle
? Quelque chose comme l'interdiction des liens chauds ?0 votes
C'est aussi pour les pages normales et la validation des formulaires