Content-Security-Policy agora usa 'strict-dynamic'

Sim!

O MDN tem uma boa explicação e exemplos.

A expressão de origem 'strict-dynamic' especifica que a confiança explicitamente dada a um script presente na marcação, acompanhando-o com um nonce ou hash, será propagada a todos os scripts carregados por esse script raiz.

Portanto, desde que o script original seja confiável (via nonce), o navegador permite que ele carregue quaisquer outros scripts sem restrição. E então, como esses scripts são confiáveis, eles podem carregar mais!


Há uma ressalva, que é que os scripts não podem ser ‘inseridos pelo parser’. Isso impede que o strict-dynamic seja explorado para ataques XSS.

Portanto, por exemplo, isso seria ‘inserido pelo parser’ e seria bloqueado:

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

Mas, construir o elemento script programaticamente não envolve análise de HTML, é muito menos provável que seja um vetor XSS e, portanto, é permitido:

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

^^ isso é essencialmente como loadScript() funciona

3 curtidas