Smart Signals 是从浏览器指纹、IP 情报和行为分析中计算得出的服务端增强信号。它们在不采集任何个人身份信息的前提下,为每一位访客提供深入的上下文。
Smart Signals——即增强后的决策、风险、网络和机器人信号——通过两条路径到达你的服务器:以 webhook 的形式推送给你(参见 Webhooks),也可以按需通过 Data API 读取。它们同时也会在仪表盘中呈现。下面的示例消费的是 webhook 载荷的结构;从 API 读取会话时会出现同样的字段。
一次访问会解析出涵盖网络、浏览器、设备和行为分析的 35+ 项 smart signals。下面的参考列出了你最常用到的那些信号,包括:
| Signal | 说明 | Response | 平台 |
|---|---|---|---|
| VPN Detection | 基于 IP 情报标记 VPN 使用 | 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 | 基于 IP 地址的城市级地理定位 + ISP 和 ASN | geo.{ country, city, timezone }, network.{ isp, asn } | Web |
| Signal | 说明 | Response | 可用性 |
|---|---|---|---|
| Browser Tampering | 检测伪造的 User-Agent、被修改的 navigator、扩展注入 | { result: boolean, anomalyScore: number } | Web |
| Antidetect Browsers | 通过 CSS 和属性探测为伪造指纹的浏览器构建版本打分 | 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 |
| Signal | 说明 | 可用性 |
|---|---|---|
| Emulator | 通过 GPU 渲染器和 UA 标记检测 Android 模拟器(BlueStacks、Genymotion、Nox、Android SDK) | Web — 所有套餐 |
仅限原生的检测。 Root、越狱、克隆/双开应用和 Frida 插桩所依赖的信号, 只有原生移动 SDK 才能采集。TRACIO 提供的是浏览器 SDK, 因此它们在 Web agent 中并不生效——请转而依赖自动化、无头浏览器、 反检测浏览器、模拟器和行为方面的判定。
| Signal | 说明 | Response | 平台 |
|---|---|---|---|
| Bot Detection | 识别自动化框架和无头浏览器 | 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、代理、Tor 和数据中心标记由服务端根据访客的 IP,使用商用 IP 情报
数据库(IP2Location / MaxMind)解析得出。公开的 webhook 载荷将合并后的结果
以布尔值的形式呈现在 network 对象上——network.vpn、network.proxy、
network.tor、network.datacenter——不包含按方法的细分或置信度字符串。
详见 IP Intelligence。
隐私浏览会在 Chromium、Firefox 和 Safari 中被推断出来,并以 identification.incognito
的形式传给你。浏览器没有任何 API 会报告这一点,因此该判定来自对隐私窗口中存储行为的
加权投票——origin private file system 的报错、存储的持久性以及各平台特有的怪异行为
都会各自贡献一部分。
这是一个概率性信号,而非确凿事实:请把它当作多个输入之一,而不是可以单凭它就采取行动
的事实。由于隐私窗口同样不会写入 _vid_t cookie,隐私模式下的访问只能依靠信号来识别,
其 identification.confidence 也相应更低。
篡改检测器用于识别为伪装身份而修改了浏览器的访客:
navigator 属性的扩展PluginArray.prototype 和 MimeType.prototype 原型链Function.prototype.toString、Object.getOwnPropertyDescriptor 及其他关键函数是否已被 Proxy 替换anomalyScore(0.0-1.0)量化了不一致的程度。高于 0.5 的值表示存在明显的篡改。
webhook 的 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(严格) | 存储被分区或 canvas 被抵御(需要 Firefox UA) | 1+ 个标记 |
| Safari ITP | Cookie 被屏蔽或 IndexedDB 受限(需要 Safari UA) | 1+ 个标记 |
Smart Signals 通过 webhook 载荷(完整结构和签名验证请参见 Webhooks)以及通过 Data API 读取会话时到达你的 服务器。下面的示例直接从 webhook 载荷中读取字段;两种方式的字段名相同。
// `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}