Content-Security-Policy utilise désormais 'strict-dynamic'

Oui !

MDN propose une bonne explication et des exemples.

L’expression source 'strict-dynamic' spécifie que la confiance explicitement accordée à un script présent dans le balisage, en l’accompagnant d’un nonce ou d’un hash, sera propagée à tous les scripts chargés par ce script racine.

Donc, tant que le script d’origine est approuvé (via un nonce), le navigateur lui permet de charger d’autres scripts sans restriction. Et ensuite, comme ces scripts sont approuvés, ils peuvent en charger d’autres !


Il y a une mise en garde : les scripts ne peuvent pas être “insérés par l’analyseur”. Cela empêche l’exploitation de strict-dynamic pour des attaques XSS.

Donc, par exemple, ceci serait “inséré par l’analyseur” et serait bloqué :

document.head.appendChild("<script src='https://example.com/xss-attempt.js' />");

Mais la construction de l’élément script par programmation n’implique pas d’analyse HTML, est beaucoup moins susceptible d’être un vecteur XSS, et est donc autorisée :

const script = document.createElement("script");
script.src = "https://example.com/script.js"
document.head.appendChild(script);

^^ c’est essentiellement ainsi que fonctionne loadScript()

3 « J'aime »