Smart Signals to serwerowe sygnały wzbogacające, obliczane na podstawie fingerprintów przeglądarki, danych IP intelligence oraz analizy behawioralnej. Dostarczają one pełnego kontekstu o każdym odwiedzającym, bez zbierania jakichkolwiek danych osobowych.
Smart Signals — wzbogacone sygnały decyzji, ryzyka, sieci i botów — są dostarczane na Twój serwer za pośrednictwem webhooków (zobacz Webhooks) oraz prezentowane w panelu. Poniższe przykłady przetwarzają strukturę payloadu webhooka.
| Sygnał | Opis | Odpowiedź | Platforma |
|---|---|---|---|
| VPN Detection | Oznacza użycie VPN na podstawie IP intelligence | network.vpn: boolean | Web, Mobile |
| Proxy Detection | Wykrywa użycie proxy datacenter oraz residential | network.proxy: boolean | Web, Mobile |
| Tor Detection | Porównuje IP ze znanymi węzłami wyjściowymi Tor | network.tor: boolean | Web, Mobile |
| Datacenter | Oznacza IP należące do znanych dostawców cloud/hosting | network.datacenter: boolean | Web, Mobile |
| IP Geolocation | Geolokalizacja na poziomie miasta + ASN z adresu IP | geo.{ country, city, lat, lon, timezone, isp } | Web, Mobile |
| Sygnał | Opis | Odpowiedź | Dostępność |
|---|---|---|---|
| Browser Tampering | Wykrywa sfałszowany User-Agent, zmodyfikowany navigator, wstrzykiwanie przez rozszerzenia | { result: boolean, anomalyScore: number } | Web |
| Antidetect Browsers | Wykrywa przeglądarki antidetect (Multilogin, GoLogin, Dolphin) przez sondy CSS/właściwości | część werdyktu tampering / bot | Web |
| Privacy Settings | Wykrywa konfiguracje przeglądarek nastawione na prywatność (Tor Browser, Brave, Firefox ETP, Safari ITP) | { result: boolean } | Web |
| Developer Tools | Wykrywa, gdy narzędzia DevTools przeglądarki są otwarte | { result: boolean } | Web — Business & Enterprise |
| Incognito (Safari) | Wnioskuje o prywatnym przeglądaniu w Safari na iOS | { result: boolean } | Web (Safari mobile) |
| Sygnał | Opis | Dostępność |
|---|---|---|
| Virtual Machine | Wykrywa VMware/VirtualBox/Parallels/QEMU przez renderer/vendor WebGL, ekran oraz hardware concurrency | Web — Enterprise |
| Emulator | Wykrywa emulatory Androida (BlueStacks, Genymotion, Nox, Android SDK) przez renderer GPU i znaczniki UA | Web — wszystkie plany |
Detekcje tylko natywne (w opracowaniu). Wykrywanie roota, jailbreaku, sklonowanych/podwójnych aplikacji, instrumentacji Frida oraz przywrócenia ustawień fabrycznych zależy od sygnałów, które może zebrać wyłącznie natywny mobilny SDK. W dzisiejszym agencie działającym tylko w przeglądarce są one nieskuteczne. Ogólne, wieloprzeglądarkowe wykrywanie trybu incognito (Chrome/Firefox) również jest w opracowaniu; obecnie wnioskowane jest wyłącznie prywatne przeglądanie w Safari mobile.
| Sygnał | Opis | Odpowiedź | Platforma |
|---|---|---|---|
| Bot Detection | Wykrywa frameworki automatyzacji oraz przeglądarki headless | bot.result: "human"|"bot"|"uncertain", bot.type: string, bot.score: number | Web, Mobile |
| Risk Score | Zagregowane ryzyko żądania, w obiekcie webhooka decision | decision.riskScore: number, decision.suspectScore: number, decision.action: string | Web, Mobile |
Flagi VPN, proxy, Tor oraz datacenter są ustalane po stronie serwera na podstawie
adresu IP odwiedzającego, z wykorzystaniem komercyjnych baz IP intelligence (IP2Location /
MaxMind). Publiczny payload webhooka udostępnia połączone wyniki jako wartości boolean
w obiekcie network — network.vpn, network.proxy, network.tor,
network.datacenter — bez rozbicia na poszczególne metody ani łańcucha ufności. Zobacz
IP Intelligence, aby uzyskać szczegóły.
W opracowaniu. Ogólne, wieloprzeglądarkowe wykrywanie trybu incognito (Chrome/Firefox) nie jest jeszcze dostępne. TRACIO obecnie wnioskuje wyłącznie o prywatnym przeglądaniu w Safari mobile. Nie polegaj dziś na ogólnej fladze
incognito.
Detektor tampering identyfikuje odwiedzających, którzy zmodyfikowali swoją przeglądarkę, aby zafałszować swoją tożsamość:
navigator przez porównanie prototypów getterówPluginArray.prototype oraz MimeType.prototypeFunction.prototype.toString, Object.getOwnPropertyDescriptor i inne krytyczne funkcje zostały zastąpione przez ProxyanomalyScore (0.0–1.0) kwantyfikuje stopień niespójności. Wartości powyżej 0.5 wskazują na znaczącą manipulację.
Obiekt webhooka decision niesie zagregowane ryzyko żądania:
decision.riskScore (liczba całkowita 0–100), decision.suspectScore (liczba) oraz
decision.action (zalecane działanie). Wynik agreguje wyjścia smart signals; poniższe
przedziały opisują, jak riskScore odwzorowuje się na poziomy ryzyka:
| Zakres wyniku | Poziom ryzyka | Typowe wskaźniki |
|---|---|---|
| 0-10 | Normalny | Czyste sygnały, znany odwiedzający, residential IP |
| 11-30 | Niski | Drobne niespójności, IP datacenter lub pierwsza wizyta |
| 31-60 | Średni | Wykryty VPN, manipulacja przeglądarką lub nietypowa velocity |
| 61-80 | Wysoki | Wiele sygnałów ryzyka, proxy + tampering, wysoka aktywność |
| 81-100 | Krytyczny | Wykryty bot, węzeł wyjściowy Tor lub poważne anomalie |
Wynik agreguje aktywne wyjścia smart signals — przede wszystkim IP intelligence (VPN/proxy/Tor/datacenter), werdykt bota oraz manipulację przeglądarką. Potwierdzona interakcja człowieka (mysz/klawiatura) obniża wynik.
Wykrywane są cztery konfiguracje przeglądarek nastawionych na prywatność:
| Przeglądarka | Metoda wykrywania | Próg |
|---|---|---|
| Tor Browser | Zablokowany canvas + zablokowany WebGL + strefa czasowa UTC + ograniczone fonty + zaokrąglony rozmiar ekranu | 3+ markery |
| Brave | UA Brave lub navigator.brave lub marka „Brave” w Client Hints | 1+ marker |
| Firefox ETP (strict) | Partycjonowany storage lub przeciwdziałanie canvas (wymagany UA Firefoksa) | 1+ marker |
| Safari ITP | Zablokowane cookies lub ograniczony IndexedDB (wymagany UA Safari) | 1+ marker |
Smart Signals docierają na Twój serwer przez payload webhooka (zobacz Webhooks, aby poznać pełną strukturę oraz weryfikację podpisu). Poniższe przykłady odczytują pola bezpośrednio z tego payloadu.
// `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}