Smart Signals — это серверные сигналы обогащения, вычисляемые на основе браузерных отпечатков, IP-интеллекта и поведенческого анализа. Они дают глубокий контекст о каждом посетителе, не собирая при этом никаких персональных данных.
Smart Signals — обогащённые сигналы решения, риска, сети и ботов — доставляются на ваш сервер через webhooks (см. Webhooks) и отображаются в дашборде. Приведённые ниже примеры работают с формой webhook-payload.
| Сигнал | Описание | Response | Платформа |
|---|---|---|---|
| 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 |
| Сигнал | Описание | Response | Доступность |
|---|---|---|---|
| Browser Tampering | Обнаруживает подделку User-Agent, изменённый navigator, инъекцию расширений | { result: boolean, anomalyScore: number } | Web |
| Antidetect Browsers | Обнаруживает антидетект-браузеры (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. Сегодня в веб-агенте они не эффективны. Общее кроссбраузерное обнаружение инкогнито (Chrome/Firefox) также находится в разработке; в настоящее время определяется только приватный просмотр Safari mobile.
| Сигнал | Описание | Response | Платформа |
|---|---|---|---|
| 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). Публичный webhook-payload отображает объединённые результаты в виде
булевых значений в объекте network — network.vpn, network.proxy,
network.tor, network.datacenter — без разбивки по методам и строки
достоверности. Подробнее см. IP Intelligence.
В разработке. Общее кроссбраузерное обнаружение инкогнито (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
signals; приведённые ниже диапазоны описывают, как riskScore отображается на
уровни риска:
| Диапазон score | Уровень риска | Типичные индикаторы |
|---|---|---|
| 0-10 | Нормальный | Чистые сигналы, известный посетитель, резидентный IP |
| 11-30 | Низкий | Незначительные несоответствия, датацентровый IP или первый визит |
| 31-60 | Средний | Обнаружен VPN, подмена браузера или необычная активность |
| 61-80 | Высокий | Несколько сигналов риска, proxy + подмена, высокая активность |
| 81-100 | Критический | Обнаружен бот, выходной узел Tor или серьёзные аномалии |
Score агрегирует выходы активных smart signals — прежде всего 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 попадают на ваш сервер через webhook-payload (см. 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}