Content Security Policy

Content Security Policy

O que é CSP?

Content Security Policy (CSP) é um padrão de segurança introduzido nos navegadores que visa combater ataques por meios de XSS ( Cross-Site Scripting ).

XSS

é um dos ataques que podem ocorrer no client-side através de blocos de códigos JavaScript envolvidos em uma tag < script > que tem fins maliciosos, caracterizado por entradas de input que acabam se tornando parte do código fonte da página em que se é injetado.

  • XSS Stored Attack quando um script que é injetado dentro de página permanece e será executado sempre que um novo usuário fizer a leitura.

  • Reflected XSS Attack quando o atacante verifica a vulnerabilidade em um site de seu interesse através da URL, assim pode redirecionar o usuário com um link malicioso e executar seu script malicioso no site alvo em uma sessão autenticada do usuário.

  • Existem também outros tipos de ataques que são bem parecidos como a modificação de um página padrão mas sem a utilização de um script e sim das estilizações no site.

Content Security Policy

É responsabilidade do navegador permitir ou bloquear certos scripts, devemos enviar em no header de nossas respostas a diretiva Content-Security-Policy.

image.png

no exemplo acima Content-Security-Policy , default-src https : //www . example . com permite que especifique sites em que confia scripts para serem rodados, e caso não encontre nenhum ele apenas rodará scripts que são de origem própria.

com a utilização de vírgula você pode especificar mais de um site no qual confia ou outras diretivas que queira utilizar, como no exemplo abaixo.

image.png

Importante lembrar que...

  • Quando utilizado o método 'Self' ou endpoints específicos no CSP ele evita todo e qualquer script que tente ser executado inline, mesmo que venha de um script de um endpoint já validado. ( por exemplo h1.setAttribute() fará uma atribuição inline no arquivo final logo não irá funcionar )

  • Os métodos para validar e evitar que qualquer tipo de conteúdo suspeito seja permitido como entrada não devem ser descartados, pois a utilização do navegador para bloquear scripts deve ser utilizado em ultimo caso.

Flow Processo no Navegador

image.png