Gli Smart Signals sono segnali di arricchimento server-side calcolati a partire dai fingerprint del browser, dalla IP intelligence e dall'analisi comportamentale. Forniscono un contesto approfondito su ogni visitatore senza raccogliere alcuna informazione di identificazione personale.
Gli Smart Signals — i segnali arricchiti di decisione, rischio, rete e bot — vengono recapitati al suo server tramite webhook (vedi Webhook) e resi visibili nella dashboard. Gli esempi qui sotto consumano la struttura del payload del webhook.
| Segnale | Descrizione | Risposta | Piattaforma |
|---|---|---|---|
| VPN Detection | Segnala l'uso di VPN dalla IP intelligence | network.vpn: boolean | Web, Mobile |
| Proxy Detection | Identifica l'uso di proxy datacenter e residenziali | network.proxy: boolean | Web, Mobile |
| Tor Detection | Confronta l'IP con i nodi di uscita Tor noti | network.tor: boolean | Web, Mobile |
| Datacenter | Segnala IP appartenenti a provider cloud/hosting noti | network.datacenter: boolean | Web, Mobile |
| IP Geolocation | Geolocalizzazione a livello di città + ASN dall'IP | geo.{ country, city, lat, lon, timezone, isp } | Web, Mobile |
| Segnale | Descrizione | Risposta | Disponibilità |
|---|---|---|---|
| Browser Tampering | Rileva User-Agent falsificato, navigator modificato, iniezione di estensioni | { result: boolean, anomalyScore: number } | Web |
| Antidetect Browsers | Rileva browser anti-rilevamento (Multilogin, GoLogin, Dolphin) tramite sonde CSS/property | parte del verdetto di tampering / bot | Web |
| Privacy Settings | Rileva configurazioni di browser orientate alla privacy (Tor Browser, Brave, Firefox ETP, Safari ITP) | { result: boolean } | Web |
| Developer Tools | Rileva quando i DevTools del browser sono aperti | { result: boolean } | Web — Business & Enterprise |
| Incognito (Safari) | Inferisce la navigazione privata di Safari su iOS | { result: boolean } | Web (Safari mobile) |
| Segnale | Descrizione | Disponibilità |
|---|---|---|
| Virtual Machine | Rileva VMware/VirtualBox/Parallels/QEMU tramite renderer/vendor WebGL, schermo e hardware concurrency | Web — Enterprise |
| Emulator | Rileva emulatori Android (BlueStacks, Genymotion, Nox, Android SDK) tramite renderer GPU e marcatori UA | Web — tutti i piani |
Rilevamenti solo nativi (in sviluppo). Il rilevamento di root, jailbreak, app clonate/duplicate, strumentazione Frida e ripristino di fabbrica dipende da segnali che solo un SDK mobile nativo può raccogliere. Questi non sono efficaci nell'agente solo-web di oggi. Anche il rilevamento generico di navigazione in incognito su più browser (Chrome/Firefox) è in sviluppo; attualmente viene inferita solo la navigazione privata di Safari mobile.
| Segnale | Descrizione | Risposta | Piattaforma |
|---|---|---|---|
| Bot Detection | Identifica framework di automazione e browser headless | bot.result: "human"|"bot"|"uncertain", bot.type: string, bot.score: number | Web, Mobile |
| Risk Score | Rischio aggregato per la richiesta, nell'oggetto decision del webhook | decision.riskScore: number, decision.suspectScore: number, decision.action: string | Web, Mobile |
I flag di VPN, proxy, Tor e datacenter vengono risolti lato server dall'IP del
visitatore utilizzando database commerciali di IP intelligence (IP2Location /
MaxMind). Il payload pubblico del webhook espone i risultati combinati come booleani
sull'oggetto network — network.vpn, network.proxy, network.tor,
network.datacenter — senza suddivisione per metodo o stringa di confidenza. Vedi
IP Intelligence per i dettagli.
In sviluppo. Il rilevamento generico della navigazione in incognito su più browser (Chrome/Firefox) non è ancora disponibile. Attualmente TRACIO inferisce solo la navigazione privata di Safari mobile. Non faccia oggi affidamento su un flag
incognitogenerico.
Il rilevatore di manomissione (tampering) identifica i visitatori che hanno modificato il proprio browser per travisare la propria identità:
navigator confrontando i prototipi dei getterPluginArray.prototype e MimeType.prototypeFunction.prototype.toString, Object.getOwnPropertyDescriptor e altre funzioni critiche sono state sostituite con ProxyL'anomalyScore (0.0-1.0) quantifica il grado di incoerenza. Valori superiori a 0.5 indicano una manomissione significativa.
L'oggetto decision del webhook trasporta il rischio aggregato per una richiesta:
decision.riskScore (intero 0-100), decision.suspectScore (numero) e
decision.action (l'azione consigliata). Il punteggio aggrega gli output degli smart
signal; le fasce qui sotto descrivono come riskScore si mappa sui livelli di rischio:
| Intervallo del punteggio | Livello di rischio | Indicatori tipici |
|---|---|---|
| 0-10 | Normale | Segnali puliti, visitatore noto, IP residenziale |
| 11-30 | Basso | Incoerenze minori, IP datacenter o prima visita |
| 31-60 | Medio | VPN rilevata, manomissione del browser o velocità insolita |
| 61-80 | Alto | Più segnali di rischio, proxy + manomissione, attività elevata |
| 81-100 | Critico | Bot rilevato, nodo di uscita Tor o anomalie gravi |
Il punteggio aggrega gli output attivi degli smart signal — principalmente la IP intelligence (VPN/proxy/Tor/datacenter), il verdetto sui bot e la manomissione del browser. L'interazione umana confermata (mouse/tastiera) abbassa il punteggio.
Vengono rilevate quattro configurazioni di browser orientate alla privacy:
| Browser | Metodo di rilevamento | Soglia |
|---|---|---|
| Tor Browser | Canvas bloccato + WebGL bloccato + fuso orario UTC + font limitati + dimensioni schermo arrotondate | 3+ marcatori |
| Brave | UA Brave o navigator.brave o brand "Brave" nei Client Hints | 1+ marcatore |
| Firefox ETP (strict) | Storage partizionato o canvas resistito (UA Firefox richiesto) | 1+ marcatore |
| Safari ITP | Cookie bloccati o IndexedDB limitato (UA Safari richiesto) | 1+ marcatore |
Gli Smart Signals raggiungono il suo server tramite il payload del webhook (vedi Webhook per la struttura completa e la verifica della firma). Gli esempi qui sotto leggono i campi direttamente da quel 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}