Eventos e detecções
Tipos de evento que o SDK envia, o que cada um detecta, a severidade e quando vira alerta no dashboard.
O SDK envia ao dashboard dois tipos de evento: detecções (algo suspeito aconteceu na página) e telemetria (pageviews, inventário, validações de pagamento). As detecções viram alertas; a telemetria alimenta o inventário de Scripts, a Saúde do SDK e a Integridade de Pagamento.
Como um evento vira alerta
- A severidade é definida pelo dashboard, não pelo SDK. A severidade informada pelo SDK fica registrada no alerta como "Severidade informada pelo SDK". As tabelas abaixo mostram a severidade base no dashboard.
- Eventos repetidos não criam alertas novos. Enquanto houver um alerta aberto para o mesmo problema (por exemplo, o mesmo script ou o mesmo destino de exfiltração), novas ocorrências somam no alerta existente. Se o alerta já foi resolvido, uma nova ocorrência abre um alerta novo.
- A notificação sai só quando o alerta é criado. Ocorrências repetidas não notificam de novo.
- Scripts que já estavam no HTML quando o SDK iniciou não geram alerta de bloqueio: eles aparecem em Scripts com o aviso de que continuam carregando pelo HTML.
Veja como tratar os alertas em Alertas.
Calibração
Nos primeiros 30 segundos de cada carregamento (ajustável de 10 a 120 s), o SDK aprende o que é normal na página.
Durante a calibração, estas detecções ficam em silêncio, e o que aparece entra na referência da página:
SCRIPT_INJECTION, KEYLOGGER_DETECTED, EXFILTRATION_ATTEMPT, WEBSOCKET_EXFILTRATION, FORM_ACTION_HIJACK,
OVERLAY_DETECTED e a adulteração de texto ou imagem de códigos de pagamento.
As demais detecções funcionam desde o início, inclusive bloqueios por regra, verificação de recebedores, área de transferência e iframes.
Scripts
| Evento | O que detecta | Severidade | Alerta |
|---|---|---|---|
SCRIPT_INJECTION | Um script executável novo aparece depois da calibração, fora do que a página tinha. Arquivos de framework da própria origem (/_next/static/, /_nuxt/ e similares) são ignorados. | alta, ajustada | sim |
SCRIPT_MODIFIED | Um script conhecido reaparece com conteúdo diferente. Só quando o conteúdo pode ser lido (script inline ou externo com CORS liberado). | alta, ajustada | sim |
SCRIPT_BLOCKED | Um script casou com uma regra de bloqueio e foi barrado. | alta | sim, exceto se o script já estava no HTML |
GTM_CONTAINER_BLOCKED | Um container do Google Tag Manager ou uma tag gtag.js fora da lista de Containers GTM permitidos. | alta | sim |
Severidade ajustada: em SCRIPT_INJECTION e SCRIPT_MODIFIED, o dashboard sobe para crítica quando o
fornecedor está marcado como ameaça no catálogo, baixa para baixa quando é um fornecedor catalogado e usa
média para scripts próprios e scripts inline. Nos demais casos, fica alta.
Dados do cliente
| Evento | O que detecta | Severidade | Alerta |
|---|---|---|---|
KEYLOGGER_DETECTED | Um script passa a escutar keydown, keyup, input, change ou paste em um campo sensível depois da calibração. Um evento por registro de listener. | crítica | sim |
EXFILTRATION_ATTEMPT | Uma requisição (fetch, XHR, beacon ou imagem) para um host não confiável leva número de cartão (validado por Luhn), CPF, CNPJ, e-mail ou chave Pix. Imagens com query string longa para host não confiável são reportadas mesmo sem esses padrões. | ajustada | sim |
WEBSOCKET_EXFILTRATION | Uma conexão WebSocket para um host desconhecido depois da calibração. As mensagens não são inspecionadas. | crítica | sim |
FIELD_ACCESS | Um script registrou listener em um campo sensível. Um evento por script, tipo de campo e tipo de listener. | informativa | não |
São hosts confiáveis para exfiltração: a própria origem, a API do Proteside, provedores de pagamento e ferramentas de analytics conhecidos e os hosts que a página usou durante a calibração. O SDK inspeciona até 64 KB de cada corpo e envia só os nomes dos padrões encontrados, nunca o conteúdo.
Severidade ajustada: a exfiltração fica crítica quando o destino é um fornecedor marcado como ameaça ou quando o corpo tem cartão, CPF ou CNPJ; fica baixa quando o destino é um processador de pagamento ou um fornecedor catalogado; nos demais casos, fica alta.
Formulário, iframes e sobreposições
| Evento | O que detecta | Severidade | Alerta |
|---|---|---|---|
FORM_ACTION_HIJACK | O atributo action de um formulário mudou, inclusive em formulários criados depois. | crítica | sim |
OVERLAY_DETECTED | Um elemento posicionado (absolute ou fixed, z-index acima de 100) cobre o centro de um campo sensível ou da área de pagamento. Elementos com modal, cookie, consent, gdpr, banner, toast, notification ou tooltip na classe ou no id são ignorados. Repete a cada verificação enquanto persistir. | alta | sim |
IFRAME_REPLACED | O endereço do iframe de um provedor de pagamento conhecido mudou. | alta | sim |
IFRAME_UNEXPECTED | Um iframe de provedor de pagamento fora das Origens de iframe esperadas, ou qualquer iframe cobrindo metade ou mais de um iframe esperado. Exige a lista preenchida. | alta | sim |
CARD_FIELD_OUTSIDE_VAULT | Um campo digitável de cartão na página principal, fora do iframe do provedor. Exige a lista de origens preenchida. | alta | sim |
Pagamento
| Evento | O que detecta | Severidade | Alerta |
|---|---|---|---|
PIX_TAMPERED | O código Pix exibido mudou para outro que não bate com a referência, ou o recebedor não está entre os confiáveis. | crítica | sim |
BOLETO_TAMPERED | A linha digitável mudou, ou o banco não está entre os confiáveis. | crítica | sim |
CRYPTO_ADDRESS_SWAP | O endereço Bitcoin ou Ethereum mudou, ou não está entre os confiáveis. | crítica | sim |
UPI_TAMPERED | O código UPI mudou, ou o VPA não está entre os confiáveis. | crítica | sim |
QR_TAMPERED | O código de outro método por QR (PayNow, PromptPay, DuitNow, QR Ph, HK FPS, Transferencias 3.0, CoDi ou carteira QR) mudou, ou a imagem de um QR code passou a vir de outro domínio. | crítica | sim |
AMOUNT_TAMPERED | O valor do código é diferente do informado em expectPayment(), ou o mesmo recebedor apareceu com outro valor. | crítica | sim |
CLIPBOARD_HIJACK | O conteúdo copiado para a área de transferência parece um código de pagamento e não bate com a referência. | alta | sim |
PAYMENT_VALIDATED | Um código de pagamento foi lido e validado. Alimenta a Integridade de Pagamento. | informativa | não |
Detalhes em Integridade de pagamento e Pix.
Ambiente e instalação
| Evento | O que detecta | Severidade | Alerta |
|---|---|---|---|
SERVICE_WORKER_BLOCKED | Um service worker registrado (novo ou existente) fora dos Service workers permitidos. Exige a lista preenchida. | alta | sim |
SERVICE_WORKER_REGISTERED | Um service worker permitido foi registrado. | informativa | não |
INSTALLATION_ORDER_WARNING | Há scripts antes do bootstrapper no <head>. Não é enviado se Ordem de instalação estiver em Silenciar. | média | sim |
Telemetria
Estes eventos nunca viram alerta:
| Evento | Quando é enviado |
|---|---|
PAGEVIEW | A cada carregamento e a cada Proteside.pageChanged(). No SDK pausado, é o único evento enviado. |
BASELINE_CALIBRATING | No início da calibração. |
BASELINE_CLASSIFIED | Logo depois, com o inventário de scripts da página (endereço, hash do conteúdo, tamanho e classificação). |
BASELINE_ESTABLISHED | Ao fim da calibração, com os totais aprendidos. |
Gerados pelo dashboard
Alguns alertas não vêm de um evento do SDK, mas de verificações no servidor:
| Alerta | Origem | Severidade |
|---|---|---|
SCRIPT_INTEGRITY_MISMATCH | O conteúdo de um script autorizado mudou em relação ao hash aprovado. | alta |
HEADER_CHANGED | Um header de segurança da página de pagamento mudou de valor. | média |
CSP_VIOLATION | Um relatório de CSP enviado ao Proteside aponta um host fora do inventário. Veja CSP e headers. | baixa |
SDK_SILENT | Um domínio com histórico ficou 24 horas sem sessões reais. É resolvido sozinho quando o tráfego volta. | média |