Smart Signals — это серверные сигналы обогащения, вычисляемые на основе браузерных отпечатков, IP-интеллекта и поведенческого анализа. Они дают глубокий контекст о каждом посетителе, не собирая при этом никаких персональных данных.
Smart Signals — обогащённые сигналы решения, риска, сети и ботов — попадают на ваш сервер двумя путями: приходят к вам как webhooks (см. Webhooks) и читаются по запросу через Data API. Они также отображаются в дашборде. Приведённые ниже примеры разбирают форму webhook-payload; те же поля приходят при чтении сессии из API.
Визит превращается в 35+ smart signals по сети, браузеру, устройству и поведению. Справочник ниже перечисляет самые ходовые из них, в том числе:
| Сигнал | Описание | Response | Платформа |
|---|---|---|---|
| VPN Detection | Помечает использование VPN по данным IP-интеллекта | network.vpn: boolean | Web |
| Proxy Detection | Выявляет использование датацентровых и резидентных прокси | network.proxy: boolean | Web |
| Tor Detection | Сверяет IP с известными выходными узлами Tor | network.tor: boolean | Web |
| Datacenter | Помечает IP известных облачных/хостинговых провайдеров | network.datacenter: boolean | Web |
| IP Geolocation | Геолокация на уровне города + ISP и ASN по IP-адресу | geo.{ country, city, timezone }, network.{ isp, asn } | Web |
| Сигнал | Описание | Response | Доступность |
|---|---|---|---|
| Browser Tampering | Обнаруживает подделку User-Agent, изменённый navigator, инъекцию расширений | { result: boolean, anomalyScore: number } | Web |
| Antidetect Browsers | Оценивает сборки браузера, подделывающие отпечаток, через CSS- и property-пробы | bot.antidetectScore: number (0–100, Pro+) | Web |
| Privacy Settings | Обнаруживает конфигурации браузеров с фокусом на приватность (Tor Browser, Brave, Firefox ETP, Safari ITP) | { result: boolean } | Web |
| Developer Tools | Обнаруживает, когда открыты DevTools браузера | { result: boolean } | Web — Business & Enterprise |
| Incognito | Определяет приватный просмотр в Chromium, Firefox и Safari | identification.incognito: boolean | Web |
| Сигнал | Описание | Доступность |
|---|---|---|
| Emulator | Обнаруживает Android-эмуляторы (BlueStacks, Genymotion, Nox, Android SDK) через GPU renderer и UA-маркеры | Web — все планы |
Нативные детекции. Обнаружение root, jailbreak, клонированных/сдвоенных приложений и инструментирования Frida зависит от сигналов, которые может собрать только нативный мобильный SDK. TRACIO поставляет браузерные SDK, поэтому в веб-агенте они не эффективны — опирайтесь вместо них на вердикты автоматизации, headless, антидетекта, эмулятора и поведения.
| Сигнал | Описание | Response | Платформа |
|---|---|---|---|
| Bot Detection | Выявляет фреймворки автоматизации и headless-браузеры | bot.result: "human"|"bot"|"uncertain", bot.type: string, bot.score: number | Web |
| Risk Score | Агрегированный риск запроса, в объекте webhook decision | decision.riskScore: number, decision.suspectScore: number, decision.action: "real"|"fake"|"suspicious" | Web |
Флаги VPN, proxy, Tor и datacenter разрешаются на стороне сервера по IP
посетителя с использованием коммерческих баз IP-интеллекта (IP2Location /
MaxMind). Публичный webhook-payload отображает объединённые результаты в виде
булевых значений в объекте network — network.vpn, network.proxy,
network.tor, network.datacenter — без разбивки по методам и строки
достоверности. Подробнее см. IP Intelligence.
Приватный просмотр определяется в Chromium, Firefox и Safari и приходит к вам как
identification.incognito. Браузерного API, который бы об этом сообщал, не
существует, поэтому вердикт складывается из взвешенного голосования по тому, как
ведёт себя хранилище в приватном окне: свой вклад дают ошибки origin private file
system, устойчивость хранилища и платформенные особенности.
Это вероятностный сигнал, а не факт: рассматривайте его как один из нескольких
входных сигналов, а не как основание для действия само по себе. Поскольку в
приватном окне не ставится cookie _vid_t, визит в инкогнито опознаётся только по
сигналам, и его identification.confidence соответственно ниже.
Детектор 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 для полной формы и проверки подписи) и при чтении сессии через Data API. Приведённые ниже примеры читают поля напрямую из webhook-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.riskScore > 60) risk = "high" else if (payload.decision.riskScore > 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}