W3C dit qu'il ya un nouvel attribut dans HTML5.1 appelé nonce
pour style
et script
qui peut être utilisé par le contenu politique de sécurité d'un site Web.
J'ai cherché sur Google mais je n'ai finalement pas compris ce que fait réellement cet attribut et quels changements lors de son utilisation?
script
etstyle
? Quelque chose comme l'interdiction de hotlink?Réponses:
L'
nonce
attribut vous permet de «mettre sur liste blanche» certains élémentsscript
etstyle
éléments en ligne, tout en évitant l'utilisation de launsafe-inline
directive CSP (qui autoriserait tous les élémentsscript
/ en lignestyle
), de sorte que vous conserviez toujours la fonctionnalité clé du CSP consistant à interdire les éléments en lignescript
/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
/ questyle
vous souhaitez «ajouter à la liste blanche», faites en sorte que votre code backend insère unnonce
attribut dans le document avant qu'il ne soit envoyé sur le fil, avec ce nonce comme valeur: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 pourscript-src
oustyle-src
: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 questyle
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
.la source
nonce
attribut, si vous n'avez pas absolument besoin de l'utiliser, alors ne le faites pas. C'est vraiment uniquement destiné aux cas où, pour une raison quelconque, vous ne pouvez pas (encore) vous débarrasser de certains scripts en ligne ou du contenu de style d'un document particulier (mais vous devriez le supprimer plus tard). Donc, si pour une raison quelconque vous êtes coincé avec le besoin de conserver le contenu du script et du style en ligne, vous pouvez au moins utiliser le mécanisme nonce pour permettre aux navigateurs de vérifier qu'ils sont OK. Sinon, vous devriez simplement utiliser pleinement CSP comme prévu, et ne permettre aucun script ou élément de style en ligne<script type="text/javascript" nonce>
et<style type="text/css" nonce>