Os Smart Signals são sinais de enriquecimento do lado do servidor computados a partir de impressões digitais do navegador, IP Intelligence e análise comportamental. Eles fornecem contexto profundo sobre cada visitante sem coletar nenhuma informação de identificação pessoal.
Os Smart Signals — os sinais enriquecidos de decisão, risco, rede e bot — são entregues ao seu servidor por meio de webhooks (veja Webhooks) e exibidos no painel. Os exemplos abaixo consomem o formato do payload do webhook.
| Sinal | Descrição | Resposta | Plataforma |
|---|---|---|---|
| Detecção de VPN | Sinaliza uso de VPN a partir de IP intelligence | network.vpn: boolean | Web, Mobile |
| Detecção de Proxy | Identifica uso de proxy de datacenter e residencial | network.proxy: boolean | Web, Mobile |
| Detecção de Tor | Compara o IP com nós de saída Tor conhecidos | network.tor: boolean | Web, Mobile |
| Datacenter | Sinaliza IPs pertencentes a provedores de nuvem/hospedagem conhecidos | network.datacenter: boolean | Web, Mobile |
| Geolocalização de IP | Geolocalização em nível de cidade + ASN a partir do endereço IP | geo.{ country, city, lat, lon, timezone, isp } | Web, Mobile |
| Sinal | Descrição | Resposta | Disponibilidade |
|---|---|---|---|
| Adulteração de navegador | Detecta User-Agent falsificado, navigator modificado, injeção de extensões | { result: boolean, anomalyScore: number } | Web |
| Navegadores antidetecção | Detecta navegadores antidetecção (Multilogin, GoLogin, Dolphin) via sondas de CSS/propriedades | parte do veredito de adulteração / bot | Web |
| Configurações de privacidade | Detecta configurações de navegador focadas em privacidade (Tor Browser, Brave, Firefox ETP, Safari ITP) | { result: boolean } | Web |
| Ferramentas de desenvolvedor | Detecta quando o DevTools do navegador está aberto | { result: boolean } | Web — Business e Enterprise |
| Anônima (Safari) | Infere navegação privada do Safari no iOS | { result: boolean } | Web (Safari mobile) |
| Sinal | Descrição | Disponibilidade |
|---|---|---|
| Máquina virtual | Detecta VMware/VirtualBox/Parallels/QEMU via renderizador/fornecedor WebGL, tela e hardware concurrency | Web — Enterprise |
| Emulador | Detecta emuladores Android (BlueStacks, Genymotion, Nox, Android SDK) via renderizador de GPU e marcadores de UA | Web — todos os planos |
Detecções exclusivas para nativo (em desenvolvimento). Detecção de root, jailbreak, app clonado/duplicado, instrumentação Frida e restauração de fábrica depende de sinais que apenas um SDK móvel nativo pode coletar. Elas não são eficazes no agente somente-web hoje. A detecção geral de navegação anônima entre navegadores (Chrome/Firefox) também está em desenvolvimento; apenas a navegação privada do Safari mobile é inferida atualmente.
| Sinal | Descrição | Resposta | Plataforma |
|---|---|---|---|
| Detecção de bots | Identifica frameworks de automação e navegadores headless | bot.result: "human"|"bot"|"uncertain", bot.type: string, bot.score: number | Web, Mobile |
| Pontuação de risco | Risco agregado para a requisição, no objeto decision do webhook | decision.riskScore: number, decision.suspectScore: number, decision.action: string | Web, Mobile |
As sinalizações de VPN, proxy, Tor e datacenter são resolvidas no lado do servidor a partir do
IP do visitante usando bancos de dados comerciais de IP intelligence (IP2Location /
MaxMind). O payload público do webhook expõe os resultados combinados como valores booleanos
no objeto network — network.vpn, network.proxy, network.tor,
network.datacenter — sem detalhamento por método ou string de confiança. Veja
IP Intelligence para mais detalhes.
Em desenvolvimento. A detecção geral de navegação anônima entre navegadores (Chrome/Firefox) ainda não está disponível. O TRACIO atualmente infere apenas a navegação privada do Safari mobile. Não confie em uma sinalização geral
incognitohoje.
O detector de adulteração identifica visitantes que modificaram seu navegador para deturpar sua identidade:
navigator comparando protótipos de getterPluginArray.prototype e MimeType.prototypeFunction.prototype.toString, Object.getOwnPropertyDescriptor e outras funções críticas foram substituídas por ProxiesO anomalyScore (0.0-1.0) quantifica o grau de inconsistência. Valores acima de 0.5 indicam adulteração significativa.
O objeto decision do webhook carrega o risco agregado para uma requisição:
decision.riskScore (inteiro 0-100), decision.suspectScore (número) e
decision.action (a ação recomendada). A pontuação agrega as saídas dos smart
signals; as faixas abaixo descrevem como o riskScore mapeia para níveis de risco:
| Faixa de pontuação | Nível de risco | Indicadores típicos |
|---|---|---|
| 0-10 | Normal | Sinais limpos, visitante conhecido, IP residencial |
| 11-30 | Baixo | Inconsistências menores, IP de datacenter ou primeira visita |
| 31-60 | Médio | VPN detectada, adulteração de navegador ou velocidade incomum |
| 61-80 | Alto | Múltiplos sinais de risco, proxy + adulteração, alta atividade |
| 81-100 | Crítico | Bot detectado, nó de saída Tor ou anomalias graves |
A pontuação agrega as saídas ativas dos smart signals — principalmente IP intelligence (VPN/proxy/Tor/datacenter), o veredito de bot e a adulteração de navegador. A interação humana confirmada (mouse/teclado) reduz a pontuação.
Quatro configurações de navegador focadas em privacidade são detectadas:
| Navegador | Método de detecção | Limiar |
|---|---|---|
| Tor Browser | Canvas bloqueado + WebGL bloqueado + fuso UTC + fontes limitadas + tamanho de tela arredondado | 3+ marcadores |
| Brave | UA do Brave ou navigator.brave ou marca "Brave" nos Client Hints | 1+ marcador |
| Firefox ETP (estrito) | Armazenamento particionado ou canvas resistido (UA do Firefox obrigatório) | 1+ marcador |
| Safari ITP | Cookies bloqueados ou IndexedDB restrito (UA do Safari obrigatório) | 1+ marcador |
Os Smart Signals chegam ao seu servidor por meio do payload do webhook (veja Webhooks para o formato completo e a verificação de assinatura). Os exemplos abaixo leem os campos diretamente desse 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}