Smart Signals는 브라우저 지문, IP 인텔리전스, 행동 분석으로부터 계산되는 서버 측 강화 신호입니다. 개인 식별 정보를 전혀 수집하지 않으면서 모든 방문자에 대한 깊이 있는 컨텍스트를 제공합니다.
Smart Signals — 강화된 결정, 위험, 네트워크, 봇 신호 — 는 웹훅을 통해 서버로 전달되며(자세한 내용은 Webhooks 참고) 대시보드에 표시됩니다. 아래 예제들은 웹훅 페이로드 형태를 사용합니다.
| Signal | 설명 | Response | 플랫폼 |
|---|---|---|---|
| VPN Detection | IP 인텔리전스를 기반으로 VPN 사용을 표시 | 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 | IP 주소로부터 도시 단위 지오로케이션 + ASN | geo.{ country, city, lat, lon, timezone, isp } | Web, Mobile |
| Signal | 설명 | Response | 사용 가능 범위 |
|---|---|---|---|
| Browser Tampering | 위조된 User-Agent, 변조된 navigator, 확장 프로그램 주입을 탐지 | { result: boolean, anomalyScore: number } | Web |
| Antidetect Browsers | CSS/속성 프로브를 통해 안티디텍트 브라우저(Multilogin, GoLogin, Dolphin) 탐지 | 변조/봇 판정의 일부 | Web |
| Privacy Settings | 프라이버시 중심 브라우저 구성(Tor Browser, Brave, Firefox ETP, Safari ITP) 탐지 | { result: boolean } | Web |
| Developer Tools | 브라우저 DevTools가 열려 있는지 탐지 | { result: boolean } | Web — Business & Enterprise |
| Incognito (Safari) | iOS에서 Safari 시크릿 브라우징을 추론 | { result: boolean } | Web (Safari 모바일) |
| Signal | 설명 | 사용 가능 범위 |
|---|---|---|
| Virtual Machine | WebGL 렌더러/벤더, 화면, 하드웨어 동시성을 통해 VMware/VirtualBox/Parallels/QEMU 탐지 | Web — Enterprise |
| Emulator | GPU 렌더러 및 UA 마커를 통해 Android 에뮬레이터(BlueStacks, Genymotion, Nox, Android SDK) 탐지 | Web — 모든 플랜 |
네이티브 전용 탐지(개발 중). 루팅, 탈옥, 복제/듀얼 앱, Frida 인스트루멘테이션, 공장 초기화 탐지는 네이티브 모바일 SDK만 수집할 수 있는 신호에 의존합니다. 이들은 오늘날 웹 전용 에이전트에서는 효과가 없습니다. 일반적인 크로스 브라우저 시크릿 모드 탐지(Chrome/Firefox) 역시 개발 중이며, 현재는 Safari 모바일 시크릿 브라우징만 추론됩니다.
| Signal | 설명 | Response | 플랫폼 |
|---|---|---|---|
| Bot Detection | 자동화 프레임워크 및 헤드리스 브라우저를 식별 | bot.result: "human"|"bot"|"uncertain", bot.type: string, bot.score: number | Web, Mobile |
| Risk Score | 웹훅 decision 객체에 담긴 요청에 대한 집계 위험 | decision.riskScore: number, decision.suspectScore: number, decision.action: string | Web, Mobile |
VPN, 프록시, Tor, 데이터센터 플래그는 상용 IP 인텔리전스 데이터베이스
(IP2Location / MaxMind)를 사용하여 방문자의 IP로부터 서버 측에서 해석됩니다.
공개 웹훅 페이로드는 결합된 결과를 network 객체의 불리언 값 — network.vpn,
network.proxy, network.tor, network.datacenter — 으로 노출하며, 메서드별
세부 분석이나 신뢰도 문자열은 제공하지 않습니다. 자세한 내용은
IP Intelligence를 참고하세요.
개발 중. 일반적인 크로스 브라우저 시크릿 모드 탐지(Chrome/Firefox)는 아직 제공되지 않습니다. TRACIO는 현재 Safari 모바일 시크릿 브라우징만 추론합니다. 오늘날 일반적인
incognito플래그에 의존하지 마세요.
변조 탐지기는 자신의 신원을 잘못 표현하기 위해 브라우저를 변조한 방문자를 식별합니다:
navigator 속성을 변조하는 확장 프로그램을 탐지PluginArray.prototype 및 MimeType.prototype 체인을 검증Function.prototype.toString, Object.getOwnPropertyDescriptor 및 기타 핵심 함수가 Proxy로 대체되었는지 테스트anomalyScore(0.0–1.0)는 불일치 정도를 정량화합니다. 0.5를 초과하는 값은 심각한 변조를 나타냅니다.
웹훅 decision 객체는 요청에 대한 집계 위험을 담습니다:
decision.riskScore(정수 0–100), decision.suspectScore(숫자),
decision.action(권장 조치). 이 점수는 smart signal 출력을 집계하며, 아래
구간은 riskScore가 위험 수준에 어떻게 매핑되는지 설명합니다:
| 점수 범위 | 위험 수준 | 일반적인 지표 |
|---|---|---|
| 0-10 | 정상 | 깨끗한 신호, 알려진 방문자, 레지덴셜 IP |
| 11-30 | 낮음 | 사소한 불일치, 데이터센터 IP 또는 첫 방문 |
| 31-60 | 중간 | VPN 탐지, 브라우저 변조 또는 비정상적인 속도 |
| 61-80 | 높음 | 다수의 위험 신호, 프록시 + 변조, 높은 활동량 |
| 81-100 | 심각 | 봇 탐지, Tor 출구 노드 또는 심각한 이상 |
이 점수는 활성화된 smart-signal 출력 — 주로 IP 인텔리전스 (VPN/프록시/Tor/데이터센터), 봇 판정, 브라우저 변조 — 를 집계합니다. 확인된 사람의 상호작용(마우스/키보드)은 점수를 낮춥니다.
네 가지 프라이버시 중심 브라우저 구성이 탐지됩니다:
| Browser | 탐지 방법 | 임계값 |
|---|---|---|
| Tor Browser | Canvas 차단 + WebGL 차단 + UTC 시간대 + 제한된 폰트 + 반올림된 화면 크기 | 마커 3개+ |
| Brave | Brave UA 또는 navigator.brave 또는 Client Hints "Brave" 브랜드 | 마커 1개+ |
| Firefox ETP (strict) | Storage 분할 또는 canvas 차단(Firefox UA 필요) | 마커 1개+ |
| Safari ITP | 쿠키 차단 또는 IndexedDB 제한(Safari UA 필요) | 마커 1개+ |
Smart Signals는 웹훅 페이로드를 통해 서버에 도달합니다(전체 형태와 서명 검증은 Webhooks 참고). 아래 예제들은 해당 페이로드에서 필드를 직접 읽습니다.
// `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}