Integridade Digital Brasil
TAG SEGURA · v1

Uma impressão que se prova.

A maior parte do mercado ainda conta veiculação com um pixel contador: uma requisição simples que soma +1 e não prova nada. Qualquer script consegue disparar milhares por segundo, sem página, sem criativo e sem pessoa. A cartilha de boas práticas da CGU pede explicitamente para evitar esse modelo, e a IN SECOM 4/2024 exige tag segura, verification, viewability e brand safety.

Esta página mostra a alternativa, funcionando: uma tag em que a impressão só é contada depois que o navegador prova, criptograficamente, que desenhou o criativo na tela.

Demonstração ao vivo

Slot real, tag real

O bloco abaixo é um espaço publicitário de verdade servido por esta plataforma. Role a página e observe o registro ao lado: nada é contado antes da renderização se provar.

Registro da medição, ao vivo

Aguardando a tag inicializar…


Console adversarial

Dispare requisições inválidas contra os mesmos endpoints públicos e leia a razão exata da recusa.

Como a contagem acontece

1. Página carrega

A tag encontra o slot e coleta a prova de ambiente (URL real, viewport, fuso, sinais de automação).

2. /serve

O servidor valida brand safety, limites de frequência e risco. Devolve UMA autorização de impressão assinada, de uso único, com TTL curto. Nada é contado aqui.

3. Criativo

Carregado por URL assinada e de uso único. O servidor registra que o criativo foi buscado: impressão sem essa busca é recusada.

4. Prova de renderização

A tag desenha o criativo num canvas e lê de volta a marca d'água de pixels única daquele serve. Sem esses pixels, não há impressão faturável.

5. /impression

Assinatura + TTL + ordem + sessão + anti-replay + prova de render + geometria. Só então a impressão é contada: e só aqui nascem as autorizações de viewable e de clique.

6. /viewable

IntersectionObserver mede ≥50% da área por ≥1 segundo contínuo (MRC/IAB), com teste de oclusão. O servidor confere o tempo alegado contra o relógio dele.

7. /click

Exige impressão anterior assinada, evento confiável do navegador, coordenadas dentro do criativo e tempo humano. Nunca bloqueia a navegação: apenas não fatura o que não se prova.

Contrato dos endpoints

EndpointPara quêO que o servidor validaRecusas típicas
POST /api/tag/serveAbre a sessão de mediçãoNenhuma. Emite a autorização de impressão.brand_safety_blocked, page_origin_mismatch, rate_limited, risk_denied
GET /api/tag/creative/:idEntrega o criativo com marca d'águaAssinatura da URL + validade403 assinatura inválida, 429 excesso de buscas
POST /api/tag/impressionConta a impressãoAssinatura, TTL, estágio, vínculo de ambiente, sessão, anti-replay, criativo buscado, prova de pixels, geometria, tempo mínimocreative_never_fetched, render_proof_missing, render_proof_mismatch, geometry_mismatch, replayed, duplicate_stage
POST /api/tag/viewableConta o viewable MRCTudo acima + impressão prévia + ≥50%/≥1s + oclusão + coerência com o relógio do servidorout_of_order, mrc_not_met, impossible_timing
POST /api/tag/clickConta o cliqueTudo acima + impressão prévia + isTrusted + coordenadas + tempo mínimo + teto de CTRout_of_order, untrusted_click, geometry_mismatch, rate_limited
GET /api/tag/report/:idTransparência por entregaPública, sem dado pessoal404 quando o serve expirou
GET /api/tag/policyContrato público de mediçãoPública,

O contrato completo, com todos os limiares numéricos que aplicamos, é público em /api/tag/policy. Qualquer auditor pode reproduzir nossa contagem sem pedir acesso ao código.

Ataque comum → como a tag responde

AtaqueResultadoPor quê
Disparar /impression e /viewable via curl, sem abrir a páginaBLOQUEIASem token assinado o beacon é recusado na primeira linha; com token, o criativo nunca foi buscado e a prova de pixels não existe.
Pedir /serve, pegar os callbacks e replayar sem renderizarBLOQUEIACada token tem nonce de uso único em Redis, e a impressão exige a marca d'água de pixels daquele serve específico.
Forjar Referer de um publisher premiumBLOQUEIAO Referer não é usado para decidir nada. A origem é derivada de Origin + URL reportada pela tag e é assinada dentro do token.
Reusar o mesmo impression_id 10.000 vezesBLOQUEIANonce de uso único, HSETNX no estágio e limite de frequência por IP e por sessão.
Viewability 99% com CTR 40%BLOQUEIATetos agregados por placement e por sessão em janela de 1 hora derrubam a pontuação de risco para a faixa de recusa.
Clique sem impressão préviaBLOQUEIAO token de clique só é emitido pelo endpoint de impressão. Sem impressão válida ele não existe.
Beacon depois do TTLBLOQUEIATTL assinado dentro do token e registro do serve expirado no Redis.
Página falsa com IntersectionObserver forçado a 100%MITIGAO tempo visível alegado é confrontado com o relógio do servidor, há teste de oclusão e checagem de geometria: mas uma página falsa que realmente renderize e espere 1 segundo é indistinguível só pela tag. É aqui que entram a camada de risco e a verification independente.

A IA é o adversário: e também a defesa

O adversário mudou

A fraude de anos atrás era um script disparando pixels. A fraude de hoje é um navegador de verdade, operado por um agente de IA, que abre a página, rola a tela, move o cursor numa curva plausível e espera o segundo do MRC passar. Contra esse adversário, checagem booleana não resolve: ele passa em todas elas, porque de fato renderizou.

A defesa também

Por isso a tag não coleta apenas “sim/não”. Ela coleta grandezas contínuas: série temporal de área visível, comprimento e velocidade do trajeto do cursor, latências de decodificação, coerência entre relógios, densidade de gestos. Cada requisição vira um vetor numérico de tamanho fixo, versionado, pronto para alimentar um modelo. A v1 que está no ar é heurística e honesta sobre isso; a arquitetura já tem o encaixe para o modelo entrar sem tocar nos endpoints.

Conformidade SECOM / CGU

ExigênciaComo esta tag atende
TAG seguraBeacons assinados (HMAC-SHA256), de uso único, com TTL, amarrados à sessão, à origem e à renderização.
VerificationHook para tag de auditoria independente no /serve, com fluxo de eventos somente-leitura, sem quebrar a medição própria.
ViewabilityPadrão MRC/IAB medido no cliente com IntersectionObserver e confirmado pelo relógio do servidor.
Brand SafetyAllowlist e blocklist de domínio e de palavra-chave avaliadas antes de entregar o criativo.
Sem pixel contadorNão existe endpoint que some +1 com um GET. A impressão exige prova criptográfica de renderização.
URL de veiculaçãoA URL real da página é reportada pela tag, conferida contra a origem e publicada como digest verificável no relatório por entrega.
Auditoria independenteTrilha de auditoria por placement e endpoint público de relatório por entrega para ressarcimento de IVT.

O código que o veículo cola na página

Duas linhas. Nenhuma configuração de chave no lado do veículo, nenhum segredo exposto no navegador: toda a assinatura acontece no servidor.

<!-- TAG SEGURA: Integridade Digital Brasil -->
<!-- 1. Reserve o espaço do anúncio. -->
<ins class="idb-adslot"
     data-idb-placement="demo-300x250"
     data-idb-format="display"
     style="display:block;width:300px;height:250px"></ins>

<!-- 2. Carregue a tag uma única vez por página. -->
<script async
        src="https://integridadedigitalbrasil.com.br/tag/idb-safe-tag.js"></script>

Limitações honestas

Nenhuma tag, sozinha, resolve fraude. O que segue é o que esta implementação não faz, dito de forma direta:

  • A prova de renderização eleva o custo, não o torna infinito. Ela obriga o fraudador a buscar o criativo e a rasterizá-lo. Um navegador real automatizado consegue produzi-la. O que ela elimina por completo é a fraude barata: disparar beacons sem nunca carregar o anúncio.
  • Não temos fingerprint de TLS nem de HTTP/2. O Google compara a assinatura da pilha de rede com o navegador declarado. Isso exige controle da camada de transporte e está fora do alcance de JavaScript.
  • Não temos o equivalente ao SODAR. Nossa tag não é ofuscada nem rotacionada. Um adversário paciente pode lê-la e planejar em cima dela: daí a importância do vínculo por chave secreta no servidor, que ele não consegue ler.
  • Não temos inteligência de IP em escala. Detectamos indícios de proxy pelos cabeçalhos, mas não assinamos base de ASN/datacenter nem histórico global de reputação.
  • O modelo de risco v1 é heurístico. Ele pega padrões grosseiros e impossibilidades físicas. Não pega um agente de IA bem-comportado numa página legítima. Fechar essa lacuna exige rótulos, volume e um modelo treinado: o encaixe existe, o modelo ainda não.
  • Cookies de terceira parte estão morrendo. O vínculo de sessão funciona sem cookie, por assinatura, mas perde um sinal de corroboração em navegadores que bloqueiam o cookie de medição.
  • Verification independente é contratual, não técnica. Deixamos o hook pronto; contratar um auditor terceiro credenciado (MRC/TAG) é decisão do anunciante.