Smart Signals — це серверні сигнали збагачення, обчислені на основі відбитків браузера, IP-аналітики та поведінкового аналізу. Вони дають глибокий контекст про кожного відвідувача, не збираючи жодних персональних даних.
Smart Signals — збагачені сигнали рішення, ризику, мережі та ботів — доставляються на ваш сервер через webhooks (див. Webhooks) і відображаються в дашборді. Приклади нижче обробляють форму payload'а webhook'а.
| Сигнал | Опис | Відповідь | Платформа |
|---|---|---|---|
| VPN Detection | Позначає використання VPN на основі IP-аналітики | network.vpn: boolean | Web, Mobile |
| Proxy Detection | Виявляє використання датацентрових і резидентних проксі | network.proxy: boolean | Web, Mobile |
| Tor Detection | Звіряє IP з відомими вихідними вузлами Tor | network.tor: boolean | Web, Mobile |
| Datacenter | Позначає IP відомих хмарних/хостингових провайдерів | network.datacenter: boolean | Web, Mobile |
| IP Geolocation | Геолокація на рівні міста + ASN за IP-адресою | geo.{ country, city, lat, lon, timezone, isp } | Web, Mobile |
| Сигнал | Опис | Відповідь | Доступність |
|---|---|---|---|
| Browser Tampering | Виявляє підроблений User-Agent, модифікований navigator, ін'єкцію розширень | { result: boolean, anomalyScore: number } | Web |
| Antidetect Browsers | Виявляє antidetect-браузери (Multilogin, GoLogin, Dolphin) через CSS-/property-проби | частина вердикту tampering / bot | Web |
| Privacy Settings | Виявляє орієнтовані на приватність конфігурації браузера (Tor Browser, Brave, Firefox ETP, Safari ITP) | { result: boolean } | Web |
| Developer Tools | Виявляє, коли відкрито браузерні DevTools | { result: boolean } | Web — Business & Enterprise |
| Incognito (Safari) | Виводить приватний перегляд у Safari на iOS | { result: boolean } | Web (Safari mobile) |
| Сигнал | Опис | Доступність |
|---|---|---|
| Virtual Machine | Виявляє VMware/VirtualBox/Parallels/QEMU через WebGL renderer/vendor, екран і hardware concurrency | Web — Enterprise |
| Emulator | Виявляє Android-емулятори (BlueStacks, Genymotion, Nox, Android SDK) через GPU renderer і UA-маркери | Web — усі тарифи |
Виявлення лише для нативу (у розробці). Виявлення root, jailbreak, клонованих/подвійних застосунків, інструментування Frida та скидання до заводських налаштувань залежить від сигналів, які може зібрати лише нативний мобільний SDK. Сьогодні у веб-агенті вони неефективні. Загальне міжбраузерне виявлення incognito (Chrome/Firefox) так само перебуває у розробці; наразі виводиться лише приватний перегляд у Safari mobile.
| Сигнал | Опис | Відповідь | Платформа |
|---|---|---|---|
| Bot Detection | Виявляє фреймворки автоматизації та headless-браузери | bot.result: "human"|"bot"|"uncertain", bot.type: string, bot.score: number | Web, Mobile |
| Risk Score | Агрегований ризик запиту, в об'єкті webhook'а decision | decision.riskScore: number, decision.suspectScore: number, decision.action: string | Web, Mobile |
Прапорці VPN, proxy, Tor і datacenter визначаються серверно за IP-адресою
відвідувача з використанням комерційних баз IP-аналітики (IP2Location /
MaxMind). Публічний payload webhook'а надає комбіновані результати як булеві значення
в об'єкті network — network.vpn, network.proxy, network.tor,
network.datacenter — без розбивки за методами чи рядка впевненості. Докладніше див.
IP Intelligence.
У розробці. Загальне міжбраузерне виявлення incognito (Chrome/Firefox) ще недоступне. Наразі TRACIO виводить лише приватний перегляд у Safari mobile. Не покладайтеся сьогодні на загальний прапорець
incognito.
Детектор tampering виявляє відвідувачів, які модифікували свій браузер, щоб спотворити свою ідентичність:
navigator, порівнюючи прототипи гетерівPluginArray.prototype та MimeType.prototypeFunction.prototype.toString, Object.getOwnPropertyDescriptor та інші критичні функції не замінено на ProxyanomalyScore (0.0-1.0) кількісно оцінює ступінь неузгодженості. Значення понад 0.5 вказують на суттєву підробку.
Об'єкт webhook'а decision несе агрегований ризик запиту:
decision.riskScore (ціле 0-100), decision.suspectScore (число) та
decision.action (рекомендована дія). Score агрегує виходи smart-сигналів;
діапазони нижче описують, як riskScore відображається на рівні ризику:
| Діапазон Score | Рівень ризику | Типові індикатори |
|---|---|---|
| 0-10 | Normal | Чисті сигнали, відомий відвідувач, резидентний IP |
| 11-30 | Low | Незначні неузгодженості, датацентровий IP або перший візит |
| 31-60 | Medium | Виявлено VPN, підробку браузера або незвичну швидкість |
| 61-80 | High | Кілька сигналів ризику, proxy + підробка, висока активність |
| 81-100 | Critical | Виявлено бота, вихідний вузол Tor або серйозні аномалії |
Score агрегує активні виходи smart-сигналів — насамперед IP-аналітику (VPN/proxy/Tor/datacenter), вердикт бота та підробку браузера. Підтверджена людська взаємодія (миша/клавіатура) знижує score.
Виявляються чотири орієнтовані на приватність конфігурації браузера:
| Браузер | Метод виявлення | Поріг |
|---|---|---|
| Tor Browser | Canvas заблоковано + WebGL заблоковано + часовий пояс UTC + обмежені шрифти + округлений розмір екрана | 3+ маркери |
| Brave | Brave UA чи navigator.brave чи бренд "Brave" у Client Hints | 1+ маркер |
| Firefox ETP (strict) | Розділене сховище чи опір canvas (потрібен Firefox UA) | 1+ маркер |
| Safari ITP | Cookies заблоковано чи IndexedDB обмежено (потрібен Safari UA) | 1+ маркер |
Smart Signals надходять на ваш сервер через payload webhook'а (див. Webhooks для повної форми та перевірки підпису). Приклади нижче читають поля безпосередньо з цього 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}