Gerador de CSP

Marque as diretivas e as fontes, e esta página monta uma Content-Security-Policy correta, numa única linha, para o cabeçalho de resposta ou para a etiqueta <meta> — mais as notas que importam: quais as diretivas que nunca recorrem a default-src, quando um hash ou nonce substitui silenciosamente o unsafe-inline, e o que o strict-dynamic desliga. Um gerador de hash SHA-256/384/512 incorporado transforma scripts e estilos inline em fontes 'sha256-…'. Tudo é executado no seu navegador; nada é enviado.
As diretivas não marcadas simplesmente não aparecem na política; uma marcação sem fontes selecionadas é ignorada. 'none' cancela as outras caixas da sua linha. A caixa de fontes extra aceita uma lista separada por vírgulas: nomes de host (cdn.example.com), esquemas (https:), hashes e nonces com ou sem aspas.
diretiva 'self''none''unsafe-inline' 'unsafe-eval''strict-dynamic' data:blob: fontes extra
Estas quatro não recorrem ao default-src: se as deixar de fora, significa “sem restrição”, pelo que uma política completa as define explicitamente.
diretiva'self''none'fontes extra

nonce do script
report-uri
report-to
Nada gerado ainda. Marque algumas fontes e prima Gerar política, ou carregue o exemplo de base OWASP.
Cole exatamente o conteúdo entre <script> e </script> (ou o bloco de estilo) — byte a byte, sem quebra de linha inicial ou final — e escolha um algoritmo. O resultado é a fonte 'sha256-…' que a CSP 3 espera.
O resultado do hash aparece aqui.
Implemente como cabeçalho, e não como meta tag, sempre que puder. O cabeçalho de resposta é a CSP completa: frame-ancestors, report-uri e report-to só funcionam aí, e um cabeçalho é aplicado antes de o primeiro byte do HTML ser analisado. A meta tag é a alternativa para ficheiros estáticos sem configuração do servidor. Verifique os cabeçalhos que o seu site realmente envia no verificador de cabeçalhos de segurança, e desmonte blocos de resposta em bruto no analisador de cabeçalhos HTTP.
Autoteste
Volta a executar o construtor contra estados fixos: ordem das fontes, exclusão mútua de 'none', a cadeia da base OWASP, a citação de nonce e hash, as notas de ausência de recurso para base-uri / form-action / frame-ancestors, unsafe-inline anulado por nonce ou hash, notas de strict-dynamic, nomes dos cabeçalhos Report-Only, exclusões da meta tag, o gerador de hash contra vetores SHA calculados de forma independente, e os caminhos negativos. Nada é enviado para lado nenhum.
O que é uma Content Security Policy?
Numa frase: uma CSP é uma lista branca que o servidor envia com a página e que diz ao navegador exatamente de onde podem vir scripts, estilos, imagens e ligações — de modo que, mesmo que um atacante injete HTML, o script injetado continua a não carregar, porque a sua origem não está na lista.
Os três grupos de diretivas
GrupoExemplosControlosRecorre ao default-src?
Diretivas de obtençãoscript-src, style-src, img-src, connect-src, font-src, object-src, frame-src, worker-src, media-src, manifest-srcde onde cada tipo de conteúdo pode ser carregadosim — uma diretiva não marcada herda o default-src
Diretivas de documentobase-uri, form-action, frame-ancestors, sandboxo que a própria página pode fazer (ser incorporada, submeter formulários, resolver URL relativos)não — cada uma tem de ser definida explicitamente
Relatórios e diversosreport-uri, report-to, upgrade-insecure-requestspara onde vão os relatórios de violação, e a atualização de URL antigosnão (não são diretivas de obtenção)
Os pontos mais sensíveis, um parágrafo cada

'unsafe-inline' contra hashes e nonces. Se uma diretiva contiver um nonce ou qualquer fonte de hash, a CSP 3 diz que o 'unsafe-inline' é ignorado — fica lá apenas para navegadores antigos. É por isso que “acrescentámos um nonce e mantivemos o unsafe-inline por segurança” significa, na prática, que os navegadores modernos aplicam o nonce. O gerador assinala esta combinação para que seja uma decisão, e não um acidente.

O strict-dynamic desativa a sua lista de permissões. Com strict-dynamic em script-src, as fontes de host, os esquemas, 'self', 'unsafe-inline' e data: são todos ignorados para scripts; só os nonces e hashes contam, e os scripts que estes carregam podem carregar mais scripts. É a forma moderna de executar scripts carregadores — mas torna decorativo o resto da lista de script-src.

As meta tags são de segunda classe. frame-ancestors, report-uri e report-to são ignorados em <meta http-equiv>. O gerador mostra que partes da sua política não se aplicariam em silêncio.

Erros comuns
  • Começar com default-src * e uma longa lista de exceções. Trabalhe ao contrário: um default-src 'self' apertado, e depois alargue só as diretivas que precisam. As políticas restritas falham de forma visível durante os testes; as políticas largas falham em silêncio para sempre.
  • Enviar script-src 'unsafe-inline' 'unsafe-eval' e dar o trabalho por concluído. Essa política não bloqueia quase nada do que um ataque XSS pretende fazer. Aplique nonce ou hash aos seus scripts, acrescente strict-dynamic, e mantenha o report-only a correr em produção para detetar regressões.
  • Esquecer que o default-src não cobre tudo. base-uri, form-action, frame-ancestors e sandbox não têm recurso de reserva — a lacuna mais citada em implementações reais de CSP.
  • Testar primeiro em modo de imposição. Corra em Report-Only com um coletor durante uma semana, leia os relatórios e só depois passe à imposição. Uma política que parte o checkout é pior do que não ter política.
  • Calcular os hashes com espaços em branco diferentes. Um hash cobre os bytes exatos do bloco inline; um passo de compilação “útil” que corta as quebras de linha finais altera todos os hashes. Gere os hashes a partir do que é enviado, e não a partir do código-fonte.
Perguntas frequentes

Preciso de default-src se listar todas as diretivas? Não, mas mantê-la como base mínima é boa prática: as novas diretivas de obtenção nos navegadores futuros passam então a usar a sua linha de base, em vez de “permitido”.

O que faz realmente o upgrade-insecure-requests? Diz ao navegador para reescrever cada URL http:// que a página carregaria — imagens, estilos, pedidos — para https:// antes de o pedir. É uma ferramenta de migração; o estado final são páginas sem qualquer URL http://.

Nonce ou hash? Nonce quando controla a resposta do servidor (um valor aleatório por resposta, tanto no cabeçalho como em cada etiqueta de script). Hash quando o HTML é estático ou fica em cache. Nunca um nonce estático — um nonce que não muda é apenas unsafe-inline com passos extra.

Porque é que a minha política é entregue mas as violações não chegam? Verifique se está em Report-Only (só relatórios), se o report-uri aponta para um coletor que aceita POST, e se também definiu o mecanismo Reporting-Endpoints / Report-To de que a diretiva moderna report-to precisa.

Uma CSP substitui outras proteções? Não. É uma camada: continue a escapar o seu output, mantenha os cookies com HttpOnly e Secure, mantenha o HSTS. O verificador de cabeçalhos de segurança deste site avalia o conjunto completo.