Proíbe o uso de quaisquer funções que executem código transmitido como uma string. Por exemplo: eval, setTimeout, setInterval serão todos bloqueados por causa da configuração unsafe-eval
Qualquer conteúdo de fontes externas também é bloqueado, incluindo imagens, CSS, WebSockets e, especialmente, JS
Via Text & Images
Observa-se que os navegadores modernos convertem imagens e textos em HTML para melhorar sua exibição (por exemplo, definindo backgrounds, centralizando, etc.). Consequentemente, se uma imagem ou arquivo de texto, como favicon.ico ou robots.txt, for aberto por meio de um iframe, ele será renderizado como HTML. Notavelmente, essas páginas frequentemente não possuem cabeçalhos CSP e podem não incluir X-Frame-Options, permitindo a execução de JavaScript arbitrário a partir delas:
Da mesma forma, respostas de erro, como arquivos de texto ou imagens, geralmente são enviadas sem cabeçalhos CSP e podem omitir X-Frame-Options. Erros podem ser induzidos a carregar dentro de um iframe, permitindo as seguintes ações:
// Inducing an nginx errorframe=document.createElement("iframe");frame.src="/%2e%2e%2f";document.body.appendChild(frame);// Triggering an error with a long URLframe=document.createElement("iframe");frame.src="/"+"A".repeat(20000);document.body.appendChild(frame);// Generating an error via extensive cookiesfor(var i=0;i<5;i++){document.cookie=i+"="+"a".repeat(4000)};frame=document.createElement("iframe");frame.src="/";document.body.appendChild(frame);// Removal of cookies is crucial post-executionfor(var i=0;i<5;i++){document.cookie=i+"="}
Após acionar qualquer um dos cenários mencionados, a execução de JavaScript dentro do iframe é possível da seguinte forma: