WASViking Docs
⌘K
Primeiros passos

Configure o Header Advisor

Adicione um header report-only na sua borda ou na origem, deixe os navegadores dos seus usuários ensinarem à WASViking o que a aplicação carrega e, depois, aprove e faça o rollout da Content Security Policy em dois movimentos.

O Header Advisor constrói a Content Security Policy de que uma aplicação precisa a partir dos relatórios dos navegadores dos próprios usuários. Este guia leva um hostname do primeiro header até uma política aplicada que se mantém atualizada. A WASViking® nunca toca na sua borda nem na sua origem: todo passo que altera um header é seu, com o valor exato para colar.

Pré-requisitos

Requisito Detalhe
Plano WASViking Header Advisor ativado (plano Pro ou superior). O Pro permite um hostname, o Business três.
Papel Admin ou Manager para iniciar, aprovar, pausar e remover advisors.
Alvo O hostname, ou um domínio ao qual ele pertence, cadastrado em Assets Inventory. O advisor só aceita hostnames que pertencem à sua organização.
Um lugar para definir um header de resposta O seu CDN ou a sua borda (Cloudflare, Google Cloud Load Balancer), o seu servidor web (nginx, Apache, IIS) ou a própria aplicação (Express, Next.js, Django, Spring Boot, ASP.NET Core).

O que esperar

Fase O que acontece Duração típica
Waiting for the first report (aguardando o primeiro relatório) O advisor existe, o header ainda não está no ar. Até o header ser implantado.
Learning from real traffic (aprendendo com o tráfego real) Os navegadores reportam o que as páginas carregam. As fontes se acumulam com os dias, os navegadores e as páginas. 7 dias por padrão (de 3 a 30). Fica pronta antes quando nenhuma fonte nova aparece por 72 horas.
Ready (pronta) A proposta está na tela, com uma nota e os cards de decisão. Até você aprovar.
Approved, depois Candidate (aprovada, depois candidata) Você copia a política como report-only. A WASViking a detecta pelos relatórios. 3 dias limpos antes de aplicar.
Enforced (aplicada) Você renomeia o header para Content-Security-Policy. A detecção acontece da mesma forma. Contínua. A análise roda a cada 10 minutos.
Update needed (atualização necessária) Uma fonte legítima apareceu depois da implantação e atingiu o quórum. Um diff para a próxima versão está pronto. Até você aprovar a atualização e colar o novo valor.

Passo 1: Adicione o hostname

Abra Edge Threat Radar → Header Advisor e clique em Add hostname. O campo lista os seus alvos; escolha um, ou digite um subdomínio de um deles. A dica abaixo do campo informa na hora se o valor é aceito. Mantenha Content Security Policy como política e clique em Start learning (iniciar o aprendizado).

O advisor abre em Step 1: Add the discovery header com o status Waiting for the first report.

Passo 2: Adicione o header de descoberta na sua plataforma

O passo mostra dois headers e um roteiro por plataforma. Os dois headers vão nas respostas daquele hostname:

Header Finalidade
Reporting-Endpoints Informa aos navegadores modernos para onde enviar os relatórios.
Content-Security-Policy-Report-Only A política de descoberta. Ela reporta todo carregamento e não bloqueia nada.

A política de descoberta é deliberadamente default-src 'none': em modo report-only, isso significa "reporte tudo o que a página carrega", que é exatamente a evidência de que a janela de aprendizado precisa.

O nome do header deve terminar em -Report-Only, exatamente como copiado. Content-Security-Policy sem esse sufixo aplica a política de descoberta e bloqueia todos os recursos da página.

Cloudflare, o exemplo passo a passo

No dashboard da Cloudflare, abra a zona e vá em Rules → Overview. Clique em Create rule e escolha Response Header Transform Rule.

A regra da Cloudflare que carrega o header de descoberta: correspondência por hostname, dois headers de resposta estáticos, posicionada por último Uma regra por hostname: a expressão corresponde ao host, as duas linhas trazem os nomes e os valores dos headers copiados do portal, e a regra fica por último para prevalecer sobre as mais antigas.

  1. Rule name: WASViking Header Advisor - <hostname>. Ignore os dois templates no topo da página; preencha o formulário abaixo deles.
  2. If incoming requests match: mantenha Custom filter expression. No construtor, defina Field como Hostname, Operator como equals e Value como o seu hostname. O link ao lado do campo alterna entre o construtor e o editor simples (Edit expression e Use expression builder); no editor, a expressão é http.host eq "<hostname>".
  3. Then → Modify response header: escolha Set static. Use os botões Copy name e Copy do portal e cole cada nome de header em Header name e cada valor em Value, exatamente como estão, incluindo as aspas. Clique em Set new header para a segunda linha.
  4. Place at: deixe Last.
  5. Clique em Deploy. Save as Draft não publica a regra.

Dois erros que merecem uma segunda conferência antes de implantar: o Value da linha Reporting-Endpoints é a string wasviking="https://...", e não o nome do header de novo; e o hostname da expressão é o que você adicionou ao advisor, então www e o apex são duas regras diferentes se você usar o advisor nos dois.

Google Cloud Load Balancer

Os headers de resposta são definidos no backend service do load balancer HTTPS externo. O portal entrega o comando gcloud com as flags --custom-response-header para aquele hostname. A flag substitui a lista inteira de headers personalizados, então inclua todos os headers de resposta personalizados que o backend já tem.

nginx, Apache e IIS

O portal gera as linhas de configuração exatas: add_header para o bloco server do nginx (coloque-as em todo location que já usa add_header, porque um add_header no nível do location substitui os do nível do server), Header always set para o Apache e as entradas customHeaders do web.config no IIS. Recarregue o servidor depois da alteração.

Express, Next.js, Django, Spring Boot e ASP.NET Core

Quando é mais fácil definir o header na aplicação, o portal gera o trecho de middleware ou de configuração de cada framework, com os valores já escapados para aquela linguagem. Implante a aplicação como de costume.

Seja qual for a plataforma, os dois valores de header são os mesmos. Prefira a borda quando você tiver uma: o header entra no ar em segundos, sem uma release.

Passo 3: Confirme que o header está no ar

Abra a aplicação em um navegador. O advisor reconhece o header pelos relatórios dos próprios navegadores em poucos minutos, e a página se atualiza sozinha. Check header (verificar header) busca a sua página inicial e lê os headers que ela envia naquele momento, o que é a forma mais rápida de confirmar a regra antes de qualquer usuário visitar.

Se o status continuar em Waiting for the first report, a regra geralmente ainda é um rascunho, a expressão corresponde a outro hostname ou o nome do header perdeu o sufixo.

Passo 4: Acompanhe a janela de aprendizado

Passo 2 do advisor no primeiro dia: fontes, páginas vistas, navegadores e a tabela de fontes com os vereditos Primeiro dia da janela de aprendizado. Cada fonte traz a sua diretiva, a sua classificação, a evidência que a sustenta e um veredito.

O passo mostra o contador de dias, o número de fontes, as páginas vistas, os navegadores distintos, as fontes novas nas últimas 24 horas e se a evidência está estável. A tabela logo abaixo lista todas as fontes:

  • As fontes Recommended (recomendadas) atingiram o quórum e passaram na verificação de reputação. Elas entram na política.
  • Needs your decision (precisa da sua decisão) marca scripts inline, event handlers inline, estilos inline, eval, workers de blob e hosts sob domínios de topo frequentemente abusados. A proposta pergunta o que fazer com cada um.
  • As fontes Watching (em observação) estão abaixo do quórum. Elas ainda não são propostas.
  • As fontes Threat (ameaça) são domínios parecidos com o seu, endereços literais ou fontes carregadas por endereços que o Edge Threat Radar sinaliza. Elas nunca são propostas.

Serviços documentados são completados automaticamente: quando os navegadores reportam o Google Tag Manager, as diretivas que a documentação dele exige são adicionadas mesmo que a janela de aprendizado nunca as tenha visto.

Uma aplicação de staging ou interna com menos de dez navegadores roda em modo de baixo tráfego, com quórum de um, para que ainda assim consiga uma política. Settings, no advisor, permite alterar a janela de aprendizado e o quórum.

Passo 5: Revise e aprove a política

Quando a janela termina, ou antes, quando a evidência está estável, o advisor avança para Step 3: Review and apply the policy e, se você optou por isso, o evento Header Advisor chega aos seus canais de notificação.

A proposta mostra a política com uma diretiva por linha e a sua nota: Strong, Partial, Weak ou Missing, com o motivo. Cada card de decisão lista as opções com o impacto de cada uma. Os hashes de scripts e estilos inline são calculados a partir das suas páginas quando o hostname é alcançável; um nonce por resposta é oferecido quando a própria aplicação consegue emitir o header; unsafe-inline é a alternativa pragmática, e a nota diz quanto isso custa. A política se atualiza conforme você altera os cards.

Clique em Approve this policy (aprovar esta política). A versão é registrada com as suas decisões e evidências e passa a ser a referência para a detecção de implantação e de drift.

Passo 6: Faça o rollout em dois movimentos

A política aprovada vem com duas abas: Copy as report-only (candidate) e Copy enforced, cada uma com o mesmo roteiro por plataforma do header de descoberta.

  1. Candidata. Substitua o header de descoberta pela política aprovada, ainda como Content-Security-Policy-Report-Only. Agora os navegadores reportam somente o que a política bloquearia. A WASViking reconhece a política pelos relatórios e marca o advisor como Candidate. Deixe-a rodar por três dias limpos; tudo o que ela reportar nessa janela é uma fonte a adicionar ou um conteúdo que não deveria estar ali.
  2. Aplicação. Renomeie o header para Content-Security-Policy. Mantenha as diretivas de relatório, pois é por elas que o drift e as injeções continuam sendo detectados. O advisor passa a Enforced e mostra In sync with the approved policy (em sincronia com a política aprovada).

Operação no dia a dia: mantendo a política atualizada

  • Update needed. Uma fonte legítima que apareceu depois da implantação e atingiu o quórum aparece em Review changes com um diff para a próxima versão. Selecione as fontes, clique em Approve vN with the selected sources, copie o novo valor para a sua borda ou origem. O advisor marca a política como em sincronia assim que os navegadores a reportam.
  • Threat signals. Um script inline injetado, um domínio parecido com o seu ou uma fonte carregada por endereços de atacantes aparece em Threat signals com severidade, página e amostra. Investigue e, depois, clique em Acknowledge (reconhecer). Nada dessa lista jamais é adicionado a uma política.
  • Pause e Remove. Pause ignora os relatórios enquanto o header pode continuar no lugar; Remove exclui o advisor e as suas evidências. Remova também o header da sua borda ou origem.
  • Alertas. Ative o evento Header Advisor em cada canal em Notification Channels para ser avisado quando uma política estiver pronta, uma atualização estiver aguardando ou um sinal de ameaça aparecer.

Solução de problemas

Sintoma Causa O que fazer
Fica em Waiting for the first report Regra salva como rascunho, expressão em outro hostname, nome do header sem -Report-Only. Implante a regra, confira a expressão, copie os nomes de novo. Use Check header.
Check header diz que o hostname não resolve O hostname não tem registro DNS público, ou resolve para um endereço privado. O Check header precisa de um hostname público. O aprendizado continua funcionando a partir dos navegadores.
Relatórios são descartados como estranhos ao advisor Navegadores em www reportam para um advisor do apex, ou o contrário. Use o advisor no hostname que os usuários realmente abrem, ou um advisor por hostname.
A política fica pronta com pouquíssimas fontes Baixo tráfego, ou a janela de aprendizado rodou em uma página que ninguém visitou. Estenda a janela de aprendizado em Settings, ou aguarde o sinal de estabilidade.
Um provedor legítimo está faltando depois da aplicação Ele apareceu depois da janela de aprendizado. Ele aparece em Review changes assim que atinge o quórum; aprove a atualização.
A aplicação quebra logo depois do header de descoberta O header foi implantado como Content-Security-Policy. Renomeie-o para Content-Security-Policy-Report-Only. A política de descoberta nunca deve ser aplicada.