Primeira CSP num site institucional
Parta do modelo estrito, acrescente apenas as suas CDN e a sua API em script-src e connect-src e publique-a primeiro em Report-Only para ver o que seria bloqueado.
Componha uma Content Security Policy a partir de modelos (estrito, analytics, permissivo), ajuste cada diretiva, ative Report-Only ou upgrade-insecure-requests e copie o cabeçalho HTTP ou a etiqueta meta, com avisos sobre unsafe-inline, unsafe-eval e curingas.
Gera um cabeçalho de monitorização que não bloqueia recursos.
Separe as origens por espaços ou vírgulas.
O gerador de CSP ajuda-o a escrever o cabeçalho Content-Security-Policy, que indica ao navegador de que origens o seu site pode carregar scripts, estilos, imagens e ligações. Destina-se a programadores, integradores front-end e administradores que pretendem reduzir o impacto de uma falha XSS sem decorar a sintaxe das diretivas.
Uma CSP (W3C Content Security Policy Level 3) é uma lista de diretivas separadas por ponto e vírgula, cada uma seguida das suas origens: `default-src 'self'; script-src 'self' https://www.googletagmanager.com; object-src 'none'; base-uri 'self'`. As palavras-chave como `'self'`, `'none'` ou `'unsafe-inline'` ficam entre plicas; os hosts e esquemas (`https:`, `data:`) não. As diretivas de carregamento (script-src, img-src, connect-src…) herdam de default-src quando estão ausentes, mas base-uri, form-action e frame-ancestors não herdam: é por isso que a ferramenta assinala a sua ausência.
A ferramenta junta os valores introduzidos, remove duplicados e campos vazios e produz três saídas: a política em bruto, o cabeçalho `Content-Security-Policy` (ou `Content-Security-Policy-Report-Only` em modo de monitorização) e uma etiqueta `<meta http-equiv>`. Depois analisa a política e avisa se faltarem default-src, object-src ou base-uri, ou se `'unsafe-inline'`, `'unsafe-eval'` ou o curinga `*` enfraquecerem a proteção. A diretiva upgrade-insecure-requests, sem valor, pede ao navegador que carregue por HTTPS os recursos referenciados em HTTP.
Selecione Estrito, Com analytics, Permissivo ou Personalizado e ative, se necessário, o modo Report-Only para obter um cabeçalho de monitorização que não bloqueia.
Preencha default-src, script-src, style-src, img-src, connect-src, frame-ancestors e os restantes campos, separando as origens por espaços ou vírgulas, e ative upgrade-insecure-requests se for preciso.
Clique em «Gerar CSP», leia os avisos e copie ou exporte o cabeçalho HTTP, a etiqueta meta ou a política em bruto.
Parta do modelo estrito, acrescente apenas as suas CDN e a sua API em script-src e connect-src e publique-a primeiro em Report-Only para ver o que seria bloqueado.
O modelo «Com analytics» acrescenta googletagmanager.com e google-analytics.com às diretivas certas, a completar com as etiquetas que realmente carrega.
Um scanner indica «Content-Security-Policy em falta» ou «unsafe-inline permitido»: reconstrua a política e confirme que não resta nenhum aviso antes de a repor em produção.
Entrada
Diretivas: default-src = 'self'; object-src = 'none'; base-uri = 'self'; Modo Report-Only: desativadoResultado
Cabeçalho HTTP: Content-Security-Policy: default-src 'self'; object-src 'none'; base-uri 'self' (nenhum aviso)Não corrige a vulnerabilidade, mas limita muito o que um script injetado pode fazer ao bloquear scripts inline e domínios não autorizados. Uma CSP com 'unsafe-inline' em script-src perde grande parte dessa proteção. A OWASP apresenta-a como defesa em profundidade, a par do escape correto dos dados.
O cabeçalho HTTP é preferível: aplica-se desde o início do carregamento e suporta todas as diretivas. A etiqueta meta serve num alojamento estático sem acesso aos cabeçalhos, mas ignora frame-ancestors, report-uri e sandbox e só protege o conteúdo que vem depois dela.
Acrescente a script-src um nonce (`'nonce-valorAleatorio'`, gerado de novo em cada resposta e repetido no atributo nonce da etiqueta) ou o hash do script (`'sha256-…'`, Base64 do SHA-256 do conteúdo exato). Pode escrever estes valores diretamente no campo script-src; o hash calcula-se com um gerador SRI ou de hash.
Não. 'self' corresponde apenas à mesma origem: mesmo esquema, host e porta. Para autorizar cdn.example.com ou todos os subdomínios, acrescente explicitamente `https://cdn.example.com` ou `https://*.example.com`.
O cabeçalho Content-Security-Policy-Report-Only avalia a mesma política sem bloquear nada: o navegador limita-se a reportar as violações na consola e, se acrescentar uma diretiva report-to ou report-uri, envia-as para o seu ponto de recolha. Permite afinar a política antes de passar para o cabeçalho bloqueante.
Sim, frame-ancestors é o substituto moderno de X-Frame-Options e tem prioridade nos navegadores que o suportam: `frame-ancestors 'none'` equivale a DENY. Muitos sites mantêm ambos para clientes mais antigos. Só funciona no cabeçalho HTTP, não numa etiqueta meta.
Ferramentas relacionadas
Ferramentas semelhantes ou complementares a esta.
Gere HSTS, nosniff, Referrer-Policy, Permissions-Policy, COOP/COEP/CORP e X-Frame-Options para Nginx ou Apache.
Gere o atributo integrity SRI de um script ou folha de estilos a partir de um conteúdo, ficheiro ou URL de CDN.
Analise cabeçalhos HTTP para verificar segurança, cache, CORS e cookies de uma resposta.
Aprenda a construir uma CSP progressiva, compreender as suas diretivas e evitar políticas demasiado permissivas ou que quebram o site.
Compreenda as diferentes camadas de segurança de um site Web: HTTPS, cabeçalhos HTTP, CSP, SRI, autenticação, palavras-passe e integridade.
Saiba quando usar criptografia, hashing, HMAC ou PBKDF2 para confidencialidade, integridade, autenticação e palavras-passe.
Entenda como OAuth 2.0, PKCE, JWT, JWK e JWKS se relacionam: autorização, tokens, chaves públicas e verificação.