Smart Signals は、ブラウザフィンガープリント、IP インテリジェンス、行動分析から算出されるサーバーサイドの強化シグナルです。個人を特定できる情報を一切収集することなく、あらゆる訪問者に関する深いコンテキストを提供します。
Smart Signals(強化された decision、risk、network、bot の各シグナル)は、Webhook を介してサーバーへ配信され(Webhooks を参照)、ダッシュボードに表示されます。以下の例は Webhook ペイロードの形式を消費します。
| シグナル | 説明 | レスポンス | プラットフォーム |
|---|---|---|---|
| VPN Detection | IP インテリジェンスから VPN 利用をフラグ付け | network.vpn: boolean | Web, Mobile |
| Proxy Detection | データセンターおよびレジデンシャルプロキシの利用を識別 | network.proxy: boolean | Web, Mobile |
| Tor Detection | 既知の Tor 出口ノードと IP を照合 | 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 |
| シグナル | 説明 | レスポンス | 提供状況 |
|---|---|---|---|
| Browser Tampering | 偽装された User-Agent、改変された navigator、拡張機能のインジェクションを検知 | { result: boolean, anomalyScore: number } | Web |
| Antidetect Browsers | CSS/プロパティのプローブによりアンチディテクトブラウザ(Multilogin、GoLogin、Dolphin)を検知 | part of tampering / bot verdict | 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 mobile) |
| シグナル | 説明 | 提供状況 |
|---|---|---|
| Virtual Machine | WebGL レンダラー/ベンダー、画面、ハードウェア並列度から VMware/VirtualBox/Parallels/QEMU を検知 | Web — Enterprise |
| Emulator | GPU レンダラーと UA マーカーから Android エミュレーター(BlueStacks、Genymotion、Nox、Android SDK)を検知 | Web — all plans |
ネイティブ限定の検知(開発中)。 Root、jailbreak、クローン/デュアルアプリ、 Frida インストルメンテーション、ファクトリーリセットの検知は、ネイティブ モバイル SDK のみが収集できるシグナルに依存します。これらは現在の Web 専用 エージェントでは有効ではありません。一般的なクロスブラウザのシークレット 検知(Chrome/Firefox)も同様に開発中であり、現在推定できるのは Safari mobile の プライベートブラウジングのみです。
| シグナル | 説明 | レスポンス | プラットフォーム |
|---|---|---|---|
| Bot Detection | 自動化フレームワークとヘッドレスブラウザを識別 | 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、プロキシ、Tor、データセンターのフラグは、商用の IP インテリジェンスデータベース(IP2Location /
MaxMind)を用いて訪問者の IP からサーバーサイドで解決されます。公開 Webhook ペイロードは、
組み合わせた結果を network オブジェクト上のブール値として表示します — network.vpn、network.proxy、network.tor、
network.datacenter — メソッドごとの内訳や信頼度文字列はありません。詳細は
IP Intelligence を参照してください。
開発中。 一般的なクロスブラウザのシークレット検知(Chrome/Firefox) はまだ利用できません。TRACIO は現在、Safari mobile のプライベート ブラウジングのみを推定します。現時点で一般的な
incognitoフラグに依存しないでください。
改ざん検知器は、自身のアイデンティティを偽って見せるためにブラウザを改変した訪問者を識別します。
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(推奨アクション)です。スコアはスマートシグナルの
出力を集約したものです。以下の帯域は riskScore がリスクレベルにどう対応するかを示します。
| スコア範囲 | リスクレベル | 典型的な指標 |
|---|---|---|
| 0-10 | Normal | クリーンなシグナル、既知の訪問者、レジデンシャル IP |
| 11-30 | Low | 軽微な不整合、データセンター IP、または初回訪問 |
| 31-60 | Medium | VPN 検知、ブラウザ改ざん、または異常な頻度 |
| 61-80 | High | 複数のリスクシグナル、プロキシ + 改ざん、高いアクティビティ |
| 81-100 | Critical | ボット検知、Tor 出口ノード、または深刻な異常 |
スコアはアクティブなスマートシグナルの出力を集約したものです — 主に IP インテリジェンス(VPN/プロキシ/Tor/データセンター)、ボット判定、ブラウザ改ざんです。 確認された人間の操作(マウス/キーボード)はスコアを下げます。
プライバシー重視のブラウザ設定を 4 種類検知します。
| ブラウザ | 検知方法 | しきい値 |
|---|---|---|
| Tor Browser | Canvas ブロック + WebGL ブロック + UTC タイムゾーン + 限定フォント + 丸められた画面サイズ | 3+ markers |
| Brave | Brave UA または navigator.brave または Client Hints の「Brave」ブランド | 1+ marker |
| Firefox ETP(strict) | ストレージのパーティション化または canvas の抵抗(Firefox UA が必要) | 1+ marker |
| Safari ITP | Cookie のブロックまたは IndexedDB の制限(Safari UA が必要) | 1+ marker |
Smart Signals は Webhook ペイロードを通じてサーバーへ届きます(完全な形式と 署名検証については 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}