Validador de cabeçalho CSP
Cole o valor de um cabeçalho Content-Security-Policy para validar de uma só vez suas diretivas e valores de origem. Detecta configurações arriscadas como unsafe-inline, a ausência de um default-src de reserva e erros de digitação nos nomes das diretivas, e mostra as origens permitidas de cada diretiva em um detalhamento visual.
Dicas
- O CSP normalmente é entregue como cabeçalho de resposta HTTP, mas também pode ser definido por meio de uma tag
<meta http-equiv="Content-Security-Policy">(embora diretivas como report-uri não tenham efeito nesse caso). - Antes de aplicar o CSP em produção, experimente primeiro o cabeçalho Content-Security-Policy-Report-Only: ele apenas coleta relatórios de violação, permitindo avaliar o impacto nas funcionalidades existentes sem quebrar nada.
- Curingas (*) e 'unsafe-inline' facilitam o desenvolvimento, mas reduzem grande parte da proteção do CSP contra XSS. Sempre restrinja uma política frouxa antes de publicar em produção.
- Repetir a mesma diretiva duas vezes não mescla os valores; apenas a primeira ocorrência tem efeito. Para adicionar ou substituir origens, mantenha tudo em uma única diretiva.
- O console do DevTools do navegador exibe recursos bloqueados com uma mensagem vermelha "Refused to load...", sendo o primeiro lugar a verificar ao depurar um CSP restritivo demais.
Perguntas frequentes
Curiosidade — Por que o CSP existe: apenas escapar a saída nunca foi suficiente para conter o XSS
A Content Security Policy remonta a uma ideia levantada por Robert Hansen por volta de 2004, que o engenheiro da Mozilla Brandon Sterne transformou em uma especificação formal a partir de cerca de 2008, culminando na primeira Candidate Recommendation do W3C (Level 1) em 2012. O cross-site scripting (XSS) era uma das vulnerabilidades web mais urgentes da época, e ficou claro que confiar apenas na disciplina do desenvolvedor — "escapar corretamente cada saída" — não era uma defesa robusta o suficiente. O CSP foi projetado como um mecanismo de defesa em profundidade que permite ao próprio navegador impor restrições sobre de onde os scripts podem vir.
O CSP Level 2 introduziu permissões baseadas em nonce e hash para scripts inline, permitindo que os sites autorizassem código inline específico sem recorrer a 'unsafe-inline'. O Level 3 acrescentou depois o 'strict-dynamic', que confia automaticamente em scripts carregados dinamicamente por um script já confiável, reduzindo drasticamente o custo de manutenção de listas de permissões baseadas em host em sites grandes.
O Google continua implantando CSP estrito baseado em nonce em seus próprios serviços de grande escala, e publicou uma pesquisa desse esforço concluindo que listas de permissões baseadas em host costumam ser contornáveis, enquanto políticas baseadas em nonce ou hash são muito mais eficazes na prática. Essa conclusão hoje é amplamente citada como boa prática de CSP, reforçando que a verdadeira decisão de design não é apenas "quais valores proibir", mas sim "sobre qual estratégia de lista de permissões construir" desde o início.