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
| Endpoint | Para quê | O que o servidor valida | Recusas típicas |
|---|---|---|---|
POST /api/tag/serve | Abre a sessão de medição | Nenhuma. Emite a autorização de impressão. | brand_safety_blocked, page_origin_mismatch, rate_limited, risk_denied |
GET /api/tag/creative/:id | Entrega o criativo com marca d'água | Assinatura da URL + validade | 403 assinatura inválida, 429 excesso de buscas |
POST /api/tag/impression | Conta a impressão | Assinatura, TTL, estágio, vínculo de ambiente, sessão, anti-replay, criativo buscado, prova de pixels, geometria, tempo mínimo | creative_never_fetched, render_proof_missing, render_proof_mismatch, geometry_mismatch, replayed, duplicate_stage |
POST /api/tag/viewable | Conta o viewable MRC | Tudo acima + impressão prévia + ≥50%/≥1s + oclusão + coerência com o relógio do servidor | out_of_order, mrc_not_met, impossible_timing |
POST /api/tag/click | Conta o clique | Tudo acima + impressão prévia + isTrusted + coordenadas + tempo mínimo + teto de CTR | out_of_order, untrusted_click, geometry_mismatch, rate_limited |
GET /api/tag/report/:id | Transparência por entrega | Pública, sem dado pessoal | 404 quando o serve expirou |
GET /api/tag/policy | Contrato público de medição | Pú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
| Ataque | Resultado | Por quê |
|---|---|---|
| Disparar /impression e /viewable via curl, sem abrir a página | BLOQUEIA | Sem 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 renderizar | BLOQUEIA | Cada 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 premium | BLOQUEIA | O 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 vezes | BLOQUEIA | Nonce de uso único, HSETNX no estágio e limite de frequência por IP e por sessão. |
| Viewability 99% com CTR 40% | BLOQUEIA | Tetos 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évia | BLOQUEIA | O token de clique só é emitido pelo endpoint de impressão. Sem impressão válida ele não existe. |
| Beacon depois do TTL | BLOQUEIA | TTL assinado dentro do token e registro do serve expirado no Redis. |
| Página falsa com IntersectionObserver forçado a 100% | MITIGA | O 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ência | Como esta tag atende |
|---|---|
| TAG segura | Beacons assinados (HMAC-SHA256), de uso único, com TTL, amarrados à sessão, à origem e à renderização. |
| Verification | Hook para tag de auditoria independente no /serve, com fluxo de eventos somente-leitura, sem quebrar a medição própria. |
| Viewability | Padrão MRC/IAB medido no cliente com IntersectionObserver e confirmado pelo relógio do servidor. |
| Brand Safety | Allowlist e blocklist de domínio e de palavra-chave avaliadas antes de entregar o criativo. |
| Sem pixel contador | Não existe endpoint que some +1 com um GET. A impressão exige prova criptográfica de renderização. |
| URL de veiculação | A URL real da página é reportada pela tag, conferida contra a origem e publicada como digest verificável no relatório por entrega. |
| Auditoria independente | Trilha 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.