Eventos y detecciones
Tipos de evento que envía el SDK, qué detecta cada uno, su severidad y cuándo se convierte en alerta en el dashboard.
El SDK envía al dashboard dos tipos de evento: detecciones (algo sospechoso ocurrió en la página) y telemetría (pageviews, inventario, validaciones de pago). Las detecciones se convierten en alertas; la telemetría alimenta el inventario de Scripts, la Salud del SDK y la Integridad de Pagos.
Cómo un evento se convierte en alerta
- La severidad la define el dashboard, no el SDK. La severidad que informa el SDK queda registrada en la alerta como "Severidad informada por el SDK". Las tablas de abajo muestran la severidad base en el dashboard.
- Los eventos repetidos no crean alertas nuevas. Mientras haya una alerta abierta para el mismo problema (por ejemplo, el mismo script o el mismo destino de exfiltración), las nuevas ocurrencias se suman a la alerta existente. Si la alerta ya se resolvió, una nueva ocurrencia abre una alerta nueva.
- La notificación sale solo cuando se crea la alerta. Las ocurrencias repetidas no vuelven a notificar.
- Los scripts que ya estaban en el HTML cuando el SDK inició no generan alertas de bloqueo: aparecen en Scripts con el aviso de que siguen cargándose desde el HTML.
Consulta cómo gestionar las alertas en Alertas.
Calibración
En los primeros 30 segundos de cada carga (ajustable de 10 a 120 s), el SDK aprende qué es normal en la página. Durante
la calibración, estas detecciones quedan en silencio, y lo que aparece entra en la referencia de la página:
SCRIPT_INJECTION, KEYLOGGER_DETECTED, EXFILTRATION_ATTEMPT, WEBSOCKET_EXFILTRATION, FORM_ACTION_HIJACK,
OVERLAY_DETECTED y la manipulación de texto o imagen de los códigos de pago.
Las demás detecciones funcionan desde el inicio, incluidos los bloqueos por regla, la verificación de destinatarios, el portapapeles y los iframes.
Scripts
| Evento | Qué detecta | Severidad | Alerta |
|---|---|---|---|
SCRIPT_INJECTION | Aparece un script ejecutable nuevo después de la calibración, fuera de lo que tenía la página. Se ignoran los archivos de framework del propio origen (/_next/static/, /_nuxt/ y similares). | alta, ajustada | sí |
SCRIPT_MODIFIED | Un script conocido reaparece con contenido distinto. Solo cuando el contenido se puede leer (script inline o externo con CORS habilitado). | alta, ajustada | sí |
SCRIPT_BLOCKED | Un script coincidió con una regla de bloqueo y se bloqueó. | alta | sí, excepto si el script ya estaba en el HTML |
GTM_CONTAINER_BLOCKED | Un contenedor de Google Tag Manager o una etiqueta gtag.js que no está en la lista de Contenedores GTM permitidos. | alta | sí |
Severidad ajustada: en SCRIPT_INJECTION y SCRIPT_MODIFIED, el dashboard la sube a crítica cuando el
proveedor está marcado como amenaza en el catálogo, la baja a baja cuando es un proveedor catalogado y usa media
para scripts propios y scripts inline. En los demás casos, queda en alta.
Datos del cliente
| Evento | Qué detecta | Severidad | Alerta |
|---|---|---|---|
KEYLOGGER_DETECTED | Un script empieza a escuchar keydown, keyup, input, change o paste en un campo sensible después de la calibración. Un evento por registro de listener. | crítica | sí |
EXFILTRATION_ATTEMPT | Una solicitud (fetch, XHR, beacon o imagen) a un host no confiable lleva número de tarjeta (validado con Luhn), CPF, CNPJ, correo electrónico o clave Pix. Las imágenes con query string larga a un host no confiable se reportan aunque no tengan esos patrones. | ajustada | sí |
WEBSOCKET_EXFILTRATION | Una conexión WebSocket a un host desconocido después de la calibración. Los mensajes no se inspeccionan. | crítica | sí |
FIELD_ACCESS | Un script registró un listener en un campo sensible. Un evento por script, tipo de campo y tipo de listener. | informativa | no |
Son hosts confiables para la exfiltración: el propio origen, la API de Proteside, los proveedores de pago y las herramientas de analytics conocidos, y los hosts que la página usó durante la calibración. El SDK inspecciona hasta 64 KB de cada cuerpo y envía solo los nombres de los patrones encontrados, nunca el contenido.
Severidad ajustada: la exfiltración queda en crítica cuando el destino es un proveedor marcado como amenaza o cuando el cuerpo contiene tarjeta, CPF o CNPJ; queda en baja cuando el destino es un procesador de pagos o un proveedor catalogado; en los demás casos, queda en alta.
Formularios, iframes y superposiciones
| Evento | Qué detecta | Severidad | Alerta |
|---|---|---|---|
FORM_ACTION_HIJACK | Cambió el atributo action de un formulario, incluso en formularios creados después. | crítica | sí |
OVERLAY_DETECTED | Un elemento posicionado (absolute o fixed, z-index mayor que 100) cubre el centro de un campo sensible o del área de pago. Se ignoran los elementos con modal, cookie, consent, gdpr, banner, toast, notification o tooltip en la clase o en el id. Se repite en cada verificación mientras persista. | alta | sí |
IFRAME_REPLACED | Cambió la dirección del iframe de un proveedor de pagos conocido. | alta | sí |
IFRAME_UNEXPECTED | Un iframe de un proveedor de pagos que no está en Orígenes de iframe esperados, o cualquier iframe que cubra la mitad o más de un iframe esperado. Requiere la lista completa. | alta | sí |
CARD_FIELD_OUTSIDE_VAULT | Un campo de tarjeta editable en la página principal, fuera del iframe del proveedor. Requiere la lista de orígenes completa. | alta | sí |
Pago
| Evento | Qué detecta | Severidad | Alerta |
|---|---|---|---|
PIX_TAMPERED | El código Pix mostrado cambió a otro que no coincide con la referencia, o el destinatario no está entre los confiables. | crítica | sí |
BOLETO_TAMPERED | La línea digitable cambió, o el banco no está entre los confiables. | crítica | sí |
CRYPTO_ADDRESS_SWAP | La dirección Bitcoin o Ethereum cambió, o no está entre las confiables. | crítica | sí |
UPI_TAMPERED | El código UPI cambió, o el VPA no está entre los confiables. | crítica | sí |
QR_TAMPERED | El código de otro método por QR (PayNow, PromptPay, DuitNow, QR Ph, HK FPS, Transferencias 3.0, CoDi o billetera QR) cambió, o la imagen de un código QR pasó a venir de otro dominio. | crítica | sí |
AMOUNT_TAMPERED | El monto del código es distinto del informado en expectPayment(), o el mismo destinatario apareció con otro monto. | crítica | sí |
CLIPBOARD_HIJACK | El contenido copiado al portapapeles parece un código de pago y no coincide con la referencia. | alta | sí |
PAYMENT_VALIDATED | Se leyó y validó un código de pago. Alimenta la Integridad de Pagos. | informativa | no |
Detalles en Integridad de pagos y Pix.
Entorno e instalación
| Evento | Qué detecta | Severidad | Alerta |
|---|---|---|---|
SERVICE_WORKER_BLOCKED | Un service worker registrado (nuevo o existente) que no está en Service workers permitidos. Requiere la lista completa. | alta | sí |
SERVICE_WORKER_REGISTERED | Se registró un service worker permitido. | informativa | no |
INSTALLATION_ORDER_WARNING | Hay scripts antes del bootstrapper en el <head>. No se envía si Orden de instalación está en Silenciar. | media | sí |
Telemetría
Estos eventos nunca se convierten en alerta:
| Evento | Cuándo se envía |
|---|---|
PAGEVIEW | En cada carga y en cada Proteside.pageChanged(). Con el SDK en pausa, es el único evento que se envía. |
BASELINE_CALIBRATING | Al inicio de la calibración. |
BASELINE_CLASSIFIED | Justo después, con el inventario de scripts de la página (dirección, hash del contenido, tamaño y clasificación). |
BASELINE_ESTABLISHED | Al terminar la calibración, con los totales aprendidos. |
Generados por el dashboard
Algunas alertas no vienen de un evento del SDK, sino de verificaciones en el servidor:
| Alerta | Origen | Severidad |
|---|---|---|
SCRIPT_INTEGRITY_MISMATCH | El contenido de un script autorizado cambió respecto al hash aprobado. | alta |
HEADER_CHANGED | Un header de seguridad de la página de pago cambió de valor. | media |
CSP_VIOLATION | Un reporte de CSP enviado a Proteside señala un host que no está en el inventario. Consulta CSP y headers. | baja |
SDK_SILENT | Un dominio con historial pasó 24 horas sin sesiones reales. Se resuelve solo cuando vuelve el tráfico. | media |