Como funciona
A Content-Security-Policy diz ao navegador de onde ele pode carregar scripts, estilos, imagens ou iframes. Bem escrita, é a defesa mais eficaz contra XSS; mal escrita, dá uma falsa sensação de segurança. Este analisador a lê diretiva por diretiva e aponta os problemas.
Cole a política como aparece nos cabeçalhos ou numa tag <meta>. Você vê uma tabela com cada diretiva, as fontes e o que ela controla. As diretivas não declaradas herdam de default-src, e a revisão leva isso em conta.
A revisão marca como graves 'unsafe-inline' sem nonce nem hash, 'unsafe-eval' e os curingas em script-src (*, https:, data:). Como avisos aparecem object-src diferente de 'none', a falta de base-uri ou de frame-ancestors, origens http://, diretivas repetidas, obsoletas e com erro de digitação. As boas práticas também são reconhecidas: nonces e 'strict-dynamic'.
Com Copiar limpa você obtém a política numa linha, sem duplicados nem espaços a mais. Use antes de publicar uma política nova ou para revisar a de um site de terceiros. A análise acontece no seu navegador.
Exemplos
Uma CSP comum com brechas
script-src 'self' 'unsafe-inline' https:; img-src *
✗ script-src permite 'unsafe-inline': a CSP não impede XSS. ✗ script-src aceita «https:»: scripts podem vir de quase qualquer lugar. ! object-src não é 'none' ! Falta base-uri ! Falta frame-ancestors
Uma CSP estrita com nonce
default-src 'self'; script-src 'nonce-r4nd0m' 'strict-dynamic'; object-src 'none'; base-uri 'none'; frame-ancestors 'none'; form-action 'self'; report-to csp
✓ Usa 'strict-dynamic' ✓ Usa nonces: gere um novo e aleatório a cada resposta.
Perguntas frequentes
Por que unsafe-inline é tão grave?
Porque o ataque XSS mais comum injeta um <script> inline. Se a política permite, a CSP deixa de proteger contra ele. Use nonces ou hashes para autorizar só os seus scripts.
O que é strict-dynamic?
Permite que um script autorizado por nonce ou hash carregue outros scripts sem listar domínios. Junto com nonces, é a forma recomendada de escrever uma CSP estrita.
Posso colar a tag <meta>?
Sim. Aceita a política sozinha, o cabeçalho completo com Content-Security-Policy: ou Content-Security-Policy-Report-Only: e o atributo content de um <meta http-equiv>.