web-dev-qa-db-fra.com

Quel est le but de l’attribut HTML "nonce" pour les éléments de script et de style?

Le W3C indique qu'il existe dans HTML5.1 un nouvel attribut appelé nonce pour style et script qui peut être utilisé par la politique de sécurité du contenu d'un site Web.

J'ai googlé à ce sujet mais je n'ai finalement pas compris ce que cet attribut faisait réellement et quels changements en l'utilisant?

83
ata

L'attribut nonce vous permet de "liste blanche" de certains éléments inline script et style, tout en évitant l'utilisation de la directive CSP unsafe-inline (qui autoriserait all inline script/style), de sorte que vous conserviez toujours la fonctionnalité clé CSP consistant à interdire inline script/style en général.

Ainsi, l'attribut nonce est une façon de dire 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é ajouté intentionnellement dans le document par celui qui le contrôle. serveur 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'attribut nonce, qui se résume aux étapes suivantes :

  1. Pour chaque demande reçue par votre serveur Web pour un document particulier, demandez à votre serveur 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 cryptographiquement sécurisé; par exemple, EDNnf03nceIOfn39fn3e9h3sdfa. C’est votre nonce.

  2. Prenez le nonce généré à l’étape 1 et, pour toute ligne script/style que vous souhaitez "ajouter à la liste blanche", faites en sorte que votre code de fond insère un attribut nonce dans le document avant son envoi via le fichier. fil, avec ce nonce comme valeur:

    <script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">…</script>
    
  3. Prenez le nonce généré à l'étape 1, ajoutez-y nonce-, et faites en sorte que votre serveur génère un en-tête CSP avec celui-ci parmi les valeurs de la liste source pour script-src ou style-src:

    Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'
    

Ainsi, le mécanisme consistant à utiliser un nonce est une alternative à la place que votre système génère un hachage du contenu du inline script ou style à autoriser, puis en spécifiant ce hachage dans la liste de sources appropriée. dans votre en-tête CSP.

Notez que, les navigateurs ne vérifiant pas (ne pouvant pas) vérifier que la valeur de nonce envoyée change entre les demandes de page, il est possible - bien que totalement déconseillé - de sauter 1 ci-dessus et de ne pas laisser votre backend faire quoi que ce soit de manière dynamique pour le nonce. Pourriez simplement mettre un attribut nonce avec une valeur statique dans la source HTML de votre doc et envoyer un en-tête CSP statique avec cette même valeur de nonce.

Mais la raison pour laquelle vous ne voudriez pas utiliser un nonce statique de cette manière est que cela irait à l’encontre de l’objectif premier de l’utilisation du nonce, car si vous utilisiez un nonce statique comme ça, à ce stade, vous pourriez aussi bien utiliser unsafe-inline.

124
sideshowbarker