Gerador de Content Security Policy (CSP)
Cria um cabeçalho Content-Security-Policy, uma etiqueta meta e uma versão Report-Only com modelos, nonces e hashes SHA-256, e analisa uma política existente.
Começar a partir de um modelo
Os domínios da Google são exemplos tirados das orientações de CSP da Google para a etiqueta Google. A Google altera-os de vez em quando: consulta a documentação atual e remove o que não usas.
Numa etiqueta <meta>, os navegadores ignoram frame-ancestors, report-uri, report-to e sandbox, e o Report-Only não é suportado. Coloca a etiqueta no topo do <head>: só se aplica ao conteúdo que vem depois dela.
Análise desta política
Estas verificações não encontraram pontos fracos.
Avaliar uma política existente
Como criar uma política
- Escolhe um ponto de partida em Começar a partir de um modelo: Estrita (nonce + strict-dynamic), Site estático fechado, Site típico ou Típico + Google Analytics / Ads. O editor abre com o modelo de site típico.
- Ajusta as Diretivas. Cada campo aceita origens separadas por espaços; um campo vazio deixa a diretiva de fora.
- Usa a Adição rápida para acrescentar uma palavra-chave à Diretiva escolhida:
'self','none','unsafe-inline','strict-dynamic',https:,data:… O botão Adicionar um nonce insere um nonce aleatório de 128 bits. - Para permitir um script inline concreto sem
'unsafe-inline', cola-o (ou o HTML à volta dele) em Calcular o hash de um script ou estilo inline e clica em Calcular SHA-256 e adicionar. - Marca upgrade-insecure-requests se alguns URL antigos ainda usam
http://e, se quiseres, indica um URL do endpoint de relatórios. - Copia o Cabeçalho HTTP, o Cabeçalho Report-Only ou a Etiqueta HTML . A Análise desta política atualiza-se à medida que escreves.
Para auditar uma política que já tens, cola-a em Avaliar uma política existente e clica em Avaliar a política; Carregar no editor copia-a para os campos.
O que faz uma Content Security Policy
Uma CSP indica ao navegador de que origens uma página pode carregar scripts, estilos, imagens, tipos de letra, frames e ligações. A sua função principal é limitar o cross-site scripting (XSS): mesmo que um atacante consiga injetar código na tua página, uma boa política impede que o script injetado seja executado. Controla também quem pode incorporar a tua página num frame (frame-ancestors), para onde os formulários podem enviar dados (form-action) e para onde pode apontar a etiqueta <base> (base-uri).
As diretivas de obtenção, como img-src ou font-src, recorrem a default-src quando faltam. Já base-uri, form-action e frame-ancestors não têm esse recurso, e é por isso que a análise as pede explicitamente.
Nonces, hashes e strict-dynamic
Permitir anfitriões (script-src https://cdn.example.com) parece seguro, mas muitas vezes pode ser contornado: os grandes domínios alojam endpoints JSONP e bibliotecas antigas que um atacante pode reaproveitar. A abordagem recomendada pelas equipas de segurança dos navegadores é uma CSP estrita: cada <script> legítimo leva um nonce gerado pelo servidor em cada resposta, ou é permitido pelo seu hash, e 'strict-dynamic' deixa esses scripts de confiança carregar os scripts de que precisam. Nessa configuração, https: e 'unsafe-inline' servem apenas de recurso para navegadores muito antigos; os modernos ignoram-nos.
Um nonce só funciona se mudar em cada resposta e for imprevisível. O que é inserido por Adicionar um nonce é um exemplo: o teu servidor ou framework tem de gerar o seu próprio. Um hash abrange os bytes exatos do código inline, por isso reformatar o script obriga a calcular um novo hash.
Cabeçalho, Report-Only e etiqueta meta
Sempre que possível, envia a política como cabeçalho de resposta HTTP. Implementa-a primeiro como Content-Security-Policy-Report-Only: os navegadores comunicam as violações (na consola e no teu endpoint, se tiveres definido um) sem bloquear nada, para poderes corrigir as páginas antes de aplicar a política a sério. As definições de relatórios acrescentam report-uri para navegadores mais antigos e report-to com um cabeçalho Reporting-Endpoints.
A versão <meta http-equiv> dá jeito em alojamento estático, mas os navegadores ignoram nela frame-ancestors, report-uri, report-to e sandbox, e não existe etiqueta meta Report-Only. A ferramenta retira essas diretivas da etiqueta e avisa-te.
Perguntas frequentes
'unsafe-inline' em style-src é um problema?
É menos perigoso do que em script-src e muito comum, porque muitas bibliotecas definem estilos inline. Ainda assim, CSS injetado pode desfigurar uma página ou divulgar dados, por isso a análise assinala-o com gravidade baixa.
Os domínios do Google Analytics estão completos?
São exemplos tirados das orientações de CSP da Google para a etiqueta Google. A Google ajusta-os com o tempo e podem ser precisos domínios regionais; consulta a documentação atual da Google e remove o que não usas. O snippet inline do gtag.js também precisa de um nonce ou de um hash.
Porque é que a minha política bloqueia os meus próprios scripts inline?
Assim que script-src é definido sem 'unsafe-inline', todos os <script> inline e atributos onclick= ficam bloqueados. Passa o código para um ficheiro ou adiciona um nonce ou um hash.
Uma CSP substitui o escaping dos dados dos utilizadores?
Não. Uma CSP é uma segunda linha de defesa. Continua a fazer o escaping do que mostras e a validar o que recebes; a política limita os estragos quando algo escapa.
Posso ter várias políticas?
Sim: se uma página receber vários cabeçalhos CSP, cada recurso tem de cumprir todos eles. Cola uma política de cada vez no avaliador.
Ferramentas relacionadas
- Gerador de redirecionamentos .htaccess Gera redirecionamentos 301 e 302 para .htaccess ou Nginx, força HTTPS e www, muda de domínio e trata a barra final, com deteção de ciclos e cadeias.
- Gerador de meta tags Gerador de meta tags gratuito para título, meta description, URL canónico, robots e viewport, com verificação do comprimento e HTML corretamente escapado.
- Gerador de hash Gera hashes MD5, SHA-1, SHA-256 e SHA-512 de texto ou de ficheiros de qualquer tamanho e verifica checksums. Tudo corre no teu navegador.
- Gerador de robots.txt Cria um ficheiro robots.txt válido com grupos de user agents, regras Allow e Disallow, sitemaps e crawl-delay, com deteção dos erros mais comuns.