Content-Security-Policy ahora utiliza 'strict-dynamic'

¡Sí!

MDN tiene una buena explicación y ejemplos.

La expresión de origen 'strict-dynamic' especifica que la confianza dada explícitamente a un script presente en el marcado, al acompañarlo con un nonce o un hash, se propagará a todos los scripts cargados por ese script raíz.

Por lo tanto, siempre que el script original sea confiable (a través de un nonce), el navegador permitirá que cargue cualquier otro script sin restricciones. Y luego, como esos scripts son confiables, ¡pueden cargar más!


Hay una advertencia, y es que los scripts no pueden ser ‘insertados por el analizador’. Esto evita que strict-dynamic sea explotado para ataques XSS.

Por lo tanto, por ejemplo, esto sería ‘insertado por el analizador’ y sería bloqueado:

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

Pero, construir el elemento script programáticamente no implica el análisis de HTML, es mucho menos probable que sea un vector XSS, y por lo tanto se permite:

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

^^ esto es esencialmente cómo funciona loadScript()

3 Me gusta