Les Smart Signals sont des signaux d'enrichissement côté serveur calculés à partir des empreintes numériques du navigateur, de l'IP Intelligence et de l'analyse comportementale. Ils fournissent un contexte approfondi sur chaque visiteur sans collecter aucune information personnelle identifiable.
Les Smart Signals — les signaux enrichis de décision, de risque, de réseau et de bot — sont livrés à votre serveur via des webhooks (voir Webhooks) et affichés dans le tableau de bord. Les exemples ci-dessous consomment la forme du payload de webhook.
| Signal | Description | Réponse | Plateforme |
|---|---|---|---|
| VPN Detection | Signale l'usage d'un VPN à partir de l'IP Intelligence | network.vpn: boolean | Web, Mobile |
| Proxy Detection | Identifie l'usage de proxys datacenter et résidentiels | network.proxy: boolean | Web, Mobile |
| Tor Detection | Compare l'IP aux nœuds de sortie Tor connus | network.tor: boolean | Web, Mobile |
| Datacenter | Signale les IP appartenant à des fournisseurs cloud/hébergement connus | network.datacenter: boolean | Web, Mobile |
| IP Geolocation | Géolocalisation au niveau de la ville + ASN à partir de l'adresse IP | geo.{ country, city, lat, lon, timezone, isp } | Web, Mobile |
| Signal | Description | Réponse | Disponibilité |
|---|---|---|---|
| Browser Tampering | Détecte un User-Agent falsifié, un navigator modifié, l'injection d'extensions | { result: boolean, anomalyScore: number } | Web |
| Antidetect Browsers | Détecte les navigateurs anti-détection (Multilogin, GoLogin, Dolphin) via des sondes CSS/propriétés | part of tampering / bot verdict | Web |
| Privacy Settings | Détecte les configurations de navigateur axées sur la confidentialité (Tor Browser, Brave, Firefox ETP, Safari ITP) | { result: boolean } | Web |
| Developer Tools | Détecte lorsque les DevTools du navigateur sont ouverts | { result: boolean } | Web — Business & Enterprise |
| Incognito (Safari) | Déduit la navigation privée Safari sur iOS | { result: boolean } | Web (Safari mobile) |
| Signal | Description | Disponibilité |
|---|---|---|
| Virtual Machine | Détecte VMware/VirtualBox/Parallels/QEMU via le renderer/vendor WebGL, l'écran et la concurrence matérielle | Web — Enterprise |
| Emulator | Détecte les émulateurs Android (BlueStacks, Genymotion, Nox, Android SDK) via le renderer GPU et les marqueurs UA | Web — toutes les offres |
Détections natives uniquement (en développement). La détection de root, jailbreak, applications clonées/dupliquées, instrumentation Frida et réinitialisation d'usine dépend de signaux que seul un SDK mobile natif peut collecter. Elles ne sont pas effectives dans l'agent web actuel. La détection générale de navigation privée multi-navigateurs (Chrome/Firefox) est elle aussi en développement ; seule la navigation privée Safari mobile est actuellement déduite.
| Signal | Description | Réponse | Plateforme |
|---|---|---|---|
| Bot Detection | Identifie les frameworks d'automatisation et les navigateurs headless | bot.result: "human"|"bot"|"uncertain", bot.type: string, bot.score: number | Web, Mobile |
| Risk Score | Risque agrégé pour la requête, sur l'objet decision du webhook | decision.riskScore: number, decision.suspectScore: number, decision.action: string | Web, Mobile |
Les indicateurs VPN, proxy, Tor et datacenter sont résolus côté serveur à partir
de l'IP du visiteur à l'aide de bases d'IP Intelligence commerciales (IP2Location /
MaxMind). Le payload public du webhook expose les résultats combinés sous forme de
booléens sur l'objet network — network.vpn, network.proxy, network.tor,
network.datacenter — sans détail par méthode ni chaîne de confiance. Voir
IP Intelligence pour les détails.
En développement. La détection générale de navigation privée multi-navigateurs (Chrome/Firefox) n'est pas encore disponible. TRACIO déduit actuellement uniquement la navigation privée Safari mobile. Ne vous fiez pas à un indicateur
incognitogénéral aujourd'hui.
Le détecteur d'altération identifie les visiteurs qui ont modifié leur navigateur pour déformer leur identité :
navigator en comparant les prototypes de gettersPluginArray.prototype et MimeType.prototypeFunction.prototype.toString, Object.getOwnPropertyDescriptor et d'autres fonctions critiques ont été remplacées par des ProxiesL'anomalyScore (0.0-1.0) quantifie le degré d'incohérence. Des valeurs supérieures à 0.5 indiquent une altération significative.
L'objet decision du webhook porte le risque agrégé d'une requête :
decision.riskScore (entier 0-100), decision.suspectScore (nombre) et
decision.action (l'action recommandée). Le score agrège les sorties des smart
signals ; les tranches ci-dessous décrivent comment riskScore correspond aux
niveaux de risque :
| Plage de score | Niveau de risque | Indicateurs typiques |
|---|---|---|
| 0-10 | Normal | Signaux propres, visiteur connu, IP résidentielle |
| 11-30 | Faible | Incohérences mineures, IP datacenter ou première visite |
| 31-60 | Moyen | VPN détecté, altération du navigateur ou vélocité inhabituelle |
| 61-80 | Élevé | Plusieurs signaux de risque, proxy + altération, forte activité |
| 81-100 | Critique | Bot détecté, nœud de sortie Tor ou anomalies sévères |
Le score agrège les sorties actives des smart signals — principalement l'IP Intelligence (VPN/proxy/Tor/datacenter), le verdict de bot et l'altération du navigateur. Une interaction humaine confirmée (souris/clavier) abaisse le score.
Quatre configurations de navigateur axées sur la confidentialité sont détectées :
| Navigateur | Méthode de détection | Seuil |
|---|---|---|
| Tor Browser | Canvas bloqué + WebGL bloqué + fuseau UTC + polices limitées + taille d'écran arrondie | 3+ marqueurs |
| Brave | UA Brave ou navigator.brave ou marque « Brave » dans les Client Hints | 1+ marqueur |
| Firefox ETP (strict) | Stockage partitionné ou canvas résisté (UA Firefox requis) | 1+ marqueur |
| Safari ITP | Cookies bloqués ou IndexedDB restreint (UA Safari requis) | 1+ marqueur |
Les Smart Signals atteignent votre serveur via le payload de webhook (voir Webhooks pour la forme complète et la vérification de signature). Les exemples ci-dessous lisent les champs directement sur ce 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}