Curious TechieDev Toolbox
Todos os Guias/Segurança10 min read

O que é Content Security Policy (CSP) e Como Prevenir XSS?

Domine o CSP Level 3: sintaxe de diretivas, uso de nonces criptográficos rigorosos, hashes e cabeçalhos zero-trust.

Principais Conclusões
  • O CSP é um cabeçalho de resposta HTTP que define quais origens podem carregar scripts, estilos e recursos na página.
  • É a principal linha de defesa contra Cross-Site Scripting (XSS) e injeções de dados no navegador.
  • O CSP Level 3 moderno recomenda nonces criptográficos ('nonce-{random}') e hashes em vez de listas de domínios.
  • A diretiva frame-ancestors 'none' substitui o X-Frame-Options para neutralizar Clickjacking.
  • Use Content-Security-Policy-Report-Only para testar e monitorar violações em produção sem quebrar o site.

1. O que é a Content Security Policy (CSP)?

A Content Security Policy (CSP) é um cabeçalho HTTP padronizado pelo W3C que permite declarar origens aprovadas de conteúdo que o navegador pode carregar e executar.

Ao limitar de onde scripts, estilos e conexões podem surgir, a CSP atua como a principal linha de defesa contra ataques de Cross-Site Scripting (XSS) e vazamento de dados.

2. Principais Diretivas e Padrões Seguros

DIRETIVACONTROLAPADRÃO SEGURO
default-srcFallback para todas as diretivas não especificadas'self'
script-srcFontes autorizadas de execução JavaScript'self' 'nonce-...'
style-srcOrigens de folhas de estilo e CSS inline'self' 'unsafe-inline'
connect-srcDestinos permitidos para Fetch, XHR e WebSocket'self' https://api.domain.com
frame-ancestorsDomínios autorizados a incorporar esta página em <iframe>'none'

3. Políticas Baseadas em Nonce vs Hash

Versões legadas dependiam de listas brancas de domínios (ex.: script-src https://cdn.exemplo.com). No entanto, redirecionamentos abertos em CDNs frequentemente burlavam essa proteção.

A CSP Estrita (Nível 3) resolve isso exigindo nonces criptográficos únicos por requisição:

Content-Security-Policy: script-src 'nonce-rAnd0m123' 'strict-dynamic'; object-src 'none';

4. Frame Ancestors vs X-Frame-Options

Embora o cabeçalho X-Frame-Options: DENY ainda seja suportado, a diretiva frame-ancestors da CSP é o padrão moderno por oferecer controle granular sobre quais origens podem enquadrar sua aplicação.

5. Plano de Implantação em 3 Fases

Fase 1: Modo Relatório (Report-Only): Implemente <code>Content-Security-Policy-Report-Only</code> para registrar violações sem quebrar os recursos do site em produção.
Fase 2: Refatoração de Código Inline: Remova manipuladores de eventos inline (ex.: <code>onclick="..."</code>) migrando para event listeners em scripts externos.
Fase 3: Aplicação Estrita: Alterne para o cabeçalho ativo <code>Content-Security-Policy</code> e declare <code>object-src 'none'</code> para bloquear plugins legados.