Política de Segurança de Conteúdo (CSP)
O que é Política de Segurança de Conteúdo (CSP)?
Política de Segurança de Conteúdo (CSP)Cabeçalho HTTP que informa ao navegador quais origens de scripts, estilos, frames e outros conteúdos são permitidas, limitando o impacto de XSS e injeções de dados.
A Política de Segurança de Conteúdo é entregue pelo cabeçalho de resposta Content-Security-Policy (ou por um elemento meta) e impõe uma allow-list granular por tipo de recurso: script-src, style-src, img-src, connect-src, frame-ancestors e outros. É padronizada pelo W3C, e o CSP Level 3 introduziu as primitivas que tornam práticas as políticas estritas. Como controle de defesa em profundidade, reduz significativamente o impacto de XSS, clickjacking (via frame-ancestors) e conteúdo misto, mas não substitui a validação de entrada nem a codificação de saída.
As allow-lists de hosts são o erro clássico. A pesquisa da Google (o artigo CSP Is Dead, Long Live CSP!, que analisou cerca de um bilhão de páginas) constatou que a grande maioria das políticas baseadas em hosts era trivialmente contornável — normalmente porque um CDN na lista também servia endpoints JSONP ou uma build desatualizada de Angular/AngularJS aproveitável como gadget. A resposta moderna é uma CSP estrita baseada em nonces: cada resposta emite um novo nonce aleatório (script-src 'nonce-r4nd0m'), os scripts inline carregam esse nonce, e um <script> injetado sem ele simplesmente não executa. Combinar o nonce com 'strict-dynamic' permite que scripts confiáveis carreguem suas próprias dependências ignorando por completo as listas de hosts, o que mantém a política curta e independente do CDN. Adicione sempre object-src 'none' e base-uri 'none' para fechar os contornos via as tags <object> e <base>.
Implante-a com segurança usando Content-Security-Policy-Report-Only, que não impõe nada mas envia relatórios de violação em JSON via report-to/report-uri, permitindo ajustar a política contra o tráfego real antes de mudar para o modo de aplicação. GitHub, Google e Dropbox executam CSPs estritas baseadas em nonces em produção. Lembre-se de que o cabeçalho é aplicado pelo navegador no lado do cliente, portanto ele mitiga, e não previne, injeções no lado do servidor.
flowchart TD
A[O servidor gera a resposta] --> B[Novo nonce aleatório por requisição]
B --> C["Header: script-src 'nonce-abc123' 'strict-dynamic'; object-src 'none'; base-uri 'none'"]
C --> D[O navegador analisa a página]
D --> E{O script tem um nonce correspondente?}
E -->|Sim: script inline legítimo| F[Executa + strict-dynamic carrega suas dependências]
E -->|Não: tag de script injetada por XSS| G[Bloqueado]
G --> H[Relatório de violação para o endpoint report-to]
style F fill:#27ae60,color:#fff
style G fill:#c0392b,color:#fff● Exemplos
- 01
Cabeçalho: 'Content-Security-Policy: script-src 'self' 'nonce-r4nd0m'; object-src 'none'; base-uri 'none'; frame-ancestors 'none'.
- 02
Modo de relatório: 'Content-Security-Policy-Report-Only' para testar uma CSP mais estrita antes de aplicá-la.
● Perguntas frequentes
O que é Política de Segurança de Conteúdo (CSP)?
Cabeçalho HTTP que informa ao navegador quais origens de scripts, estilos, frames e outros conteúdos são permitidas, limitando o impacto de XSS e injeções de dados. Pertence à categoria Segurança de aplicações da cibersegurança.
O que significa Política de Segurança de Conteúdo (CSP)?
Cabeçalho HTTP que informa ao navegador quais origens de scripts, estilos, frames e outros conteúdos são permitidas, limitando o impacto de XSS e injeções de dados.
Como se defender contra Política de Segurança de Conteúdo (CSP)?
As defesas contra Política de Segurança de Conteúdo (CSP) costumam combinar controles técnicos e práticas operacionais, conforme detalhado na definição acima.
Quais são outros nomes para Política de Segurança de Conteúdo (CSP)?
Nomes alternativos comuns: CSP.