Las Smart Signals son señales de enriquecimiento del lado del servidor calculadas a partir de huellas digitales del navegador, IP intelligence y análisis de comportamiento. Proporcionan un contexto profundo sobre cada visitante sin recopilar ninguna información de identificación personal.
Las Smart Signals —las señales enriquecidas de decisión, riesgo, red y bot— se entregan a su servidor mediante webhooks (ver Webhooks) y se muestran en el dashboard. Los ejemplos siguientes consumen la forma del payload del webhook.
| Señal | Descripción | Respuesta | Plataforma |
|---|---|---|---|
| VPN Detection | Marca el uso de VPN a partir de IP intelligence | network.vpn: boolean | Web, Móvil |
| Proxy Detection | Identifica el uso de proxies de datacenter y residenciales | network.proxy: boolean | Web, Móvil |
| Tor Detection | Coteja la IP con nodos de salida de Tor conocidos | network.tor: boolean | Web, Móvil |
| Datacenter | Marca las IPs pertenecientes a proveedores de nube/hosting conocidos | network.datacenter: boolean | Web, Móvil |
| IP Geolocation | Geolocalización a nivel de ciudad + ASN a partir de la dirección IP | geo.{ country, city, lat, lon, timezone, isp } | Web, Móvil |
| Señal | Descripción | Respuesta | Disponibilidad |
|---|---|---|---|
| Browser Tampering | Detecta User-Agent falsificado, navigator modificado, inyección de extensiones | { result: boolean, anomalyScore: number } | Web |
| Antidetect Browsers | Detecta navegadores anti-detección (Multilogin, GoLogin, Dolphin) mediante sondeos de CSS/propiedades | parte del veredicto de tampering / bot | Web |
| Privacy Settings | Detecta configuraciones de navegador centradas en la privacidad (Tor Browser, Brave, Firefox ETP, Safari ITP) | { result: boolean } | Web |
| Developer Tools | Detecta cuándo están abiertas las DevTools del navegador | { result: boolean } | Web — Business y Enterprise |
| Incognito (Safari) | Infiere la navegación privada de Safari en iOS | { result: boolean } | Web (Safari móvil) |
| Señal | Descripción | Disponibilidad |
|---|---|---|
| Virtual Machine | Detecta VMware/VirtualBox/Parallels/QEMU mediante el renderizador/fabricante de WebGL, la pantalla y la concurrencia de hardware | Web — Enterprise |
| Emulator | Detecta emuladores de Android (BlueStacks, Genymotion, Nox, Android SDK) mediante el renderizador de GPU y marcadores de UA | Web — todos los planes |
Detecciones solo nativas (en desarrollo). La detección de root, jailbreak, apps clonadas/duales, la instrumentación con Frida y la detección de restablecimiento de fábrica dependen de señales que solo un SDK móvil nativo puede recopilar. No son efectivas en el agente solo web actual. La detección general de incógnito entre navegadores (Chrome/Firefox) está igualmente en desarrollo; actualmente solo se infiere la navegación privada de Safari en móvil.
| Señal | Descripción | Respuesta | Plataforma |
|---|---|---|---|
| Bot Detection | Identifica frameworks de automatización y navegadores headless | bot.result: "human"|"bot"|"uncertain", bot.type: string, bot.score: number | Web, Móvil |
| Risk Score | Riesgo agregado de la solicitud, en el objeto decision del webhook | decision.riskScore: number, decision.suspectScore: number, decision.action: string | Web, Móvil |
Los indicadores de VPN, proxy, Tor y datacenter se resuelven en el lado del servidor a partir de la
IP del visitante usando bases de datos comerciales de IP intelligence (IP2Location /
MaxMind). El payload público del webhook muestra los resultados combinados como booleanos
en el objeto network —network.vpn, network.proxy, network.tor,
network.datacenter— sin desglose por método ni cadena de confianza. Ver
IP Intelligence para más detalles.
En desarrollo. La detección general de incógnito entre navegadores (Chrome/Firefox) aún no está disponible. Actualmente TRACIO solo infiere la navegación privada de Safari en móvil. No se apoye hoy en un indicador
incognitogeneral.
El detector de tampering identifica a los visitantes que han modificado su navegador para tergiversar su identidad:
navigator comparando los prototipos de los gettersPluginArray.prototype y MimeType.prototypeFunction.prototype.toString, Object.getOwnPropertyDescriptor y otras funciones críticas han sido reemplazadas por ProxiesEl anomalyScore (0.0-1.0) cuantifica el grado de inconsistencia. Los valores por encima de 0.5 indican una manipulación significativa.
El objeto decision del webhook lleva el riesgo agregado de una solicitud:
decision.riskScore (entero 0-100), decision.suspectScore (número) y
decision.action (la acción recomendada). La puntuación agrega las salidas de las smart
signals; las bandas siguientes describen cómo se mapea riskScore a los niveles de riesgo:
| Rango de puntuación | Nivel de riesgo | Indicadores típicos |
|---|---|---|
| 0-10 | Normal | Señales limpias, visitante conocido, IP residencial |
| 11-30 | Bajo | Inconsistencias menores, IP de datacenter o primera visita |
| 31-60 | Medio | VPN detectada, manipulación del navegador o velocidad inusual |
| 61-80 | Alto | Múltiples señales de riesgo, proxy + manipulación, actividad alta |
| 81-100 | Crítico | Bot detectado, nodo de salida de Tor o anomalías graves |
La puntuación agrega las salidas de las smart signals activas —principalmente IP intelligence (VPN/proxy/Tor/datacenter), el veredicto de bot y la manipulación del navegador—. La interacción humana confirmada (ratón/teclado) reduce la puntuación.
Se detectan cuatro configuraciones de navegador centradas en la privacidad:
| Navegador | Método de detección | Umbral |
|---|---|---|
| Tor Browser | Canvas bloqueado + WebGL bloqueado + zona horaria UTC + fuentes limitadas + tamaño de pantalla redondeado | 3+ marcadores |
| Brave | UA de Brave o navigator.brave o marca "Brave" en Client Hints | 1+ marcador |
| Firefox ETP (estricto) | Almacenamiento particionado o canvas resistido (se requiere UA de Firefox) | 1+ marcador |
| Safari ITP | Cookies bloqueadas o IndexedDB restringido (se requiere UA de Safari) | 1+ marcador |
Las Smart Signals llegan a su servidor a través del payload del webhook (ver Webhooks para la forma completa y la verificación de firmas). Los ejemplos siguientes leen los campos directamente de ese payload.
// `payload` is the webhook delivery body (/docs/webhooks)const score = payload.decision.riskScoreconst isVPN = payload.network.vpnconst isBot = payload.bot.result === "bot"
if (isBot) { return block("Automated access")}
if (score > 60) { return requireMFA()}
if (isVPN && score > 30) { return requireCaptcha()}
return allow()// `payload` is the webhook delivery body (/docs/webhooks)function computeFraudRisk(payload: WebhookPayload): string { let risk = "low"
if (payload.decision.suspectScore > 60) risk = "high" else if (payload.decision.suspectScore > 30) risk = "medium"
// Escalate when multiple network signals agree if (payload.network.vpn && payload.network.proxy) risk = "high" if (payload.network.tor) risk = "high" if (payload.bot.result === "bot") risk = "high"
return risk}