إشارات Smart Signals هي إشارات إثراء من جانب الخادم تُحسب من بصمات المتصفح، واستخبارات عناوين IP، وتحليل السلوك. توفر سياقًا عميقًا عن كل زائر دون جمع أي بيانات تعريف شخصية.
تصل إشارات Smart Signals — أي إشارات القرار والمخاطرة والشبكة والبوتات المُثراة — إلى خادمك بطريقتين: تُدفَع إليك على هيئة webhooks (انظر Webhooks)، وتُقرأ عند الطلب عبر Data API. كما تُعرض في لوحة التحكم. تستهلك الأمثلة أدناه شكل حمولة الـ webhook؛ وتظهر الحقول نفسها عند قراءة جلسة من الـ API.
تتحوّل الزيارة الواحدة إلى 35+ إشارة ذكية تغطي الشبكة والمتصفح والجهاز والتحليل السلوكي. يذكر المرجع أدناه أكثرها استخدامًا، ومنها:
| الإشارة | الوصف | الاستجابة | المنصة |
|---|---|---|---|
| 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 |
| الإشارة | الوصف | الاستجابة | التوفر |
|---|---|---|---|
| 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 |
| الإشارة | الوصف | التوفر |
|---|---|---|
| Emulator | يكتشف محاكيات Android (BlueStacks، Genymotion، Nox، Android SDK) عبر مُصيِّر GPU وعلامات UA | Web — all plans |
اكتشافات أصلية فقط. يعتمد اكتشاف الروت، وكسر الحماية (jailbreak)، والتطبيقات المستنسخة/المزدوجة، وأدوات Frida على إشارات لا يستطيع جمعها سوى SDK أصلي للأجهزة المحمولة. تقدّم TRACIO حزم SDK للمتصفحات، لذا فهذه الاكتشافات غير فعّالة في وكيل الويب — اعتمد بدلًا منها على أحكام الأتمتة، والمتصفحات بلا واجهة (headless)، ومكافحة الكشف، والمحاكي، والسلوك.
| الإشارة | الوصف | الاستجابة | المنصة |
|---|---|---|---|
| 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 والوكيل وTor ومركز البيانات من جانب الخادم انطلاقًا من عنوان IP
الخاص بالزائر باستخدام قواعد بيانات تجارية لاستخبارات IP (IP2Location /
MaxMind). تعرض حمولة الـ webhook العامة النتائج المجمَّعة كقيم منطقية (booleans)
على كائن network — network.vpn، network.proxy، network.tor،
network.datacenter — دون تفصيل لكل طريقة أو سلسلة ثقة. انظر
IP Intelligence للتفاصيل.
يُستنتج التصفح الخاص في Chromium وFirefox وSafari، ويصلك في الحقل
identification.incognito. لا توجد واجهة برمجية في المتصفح تُبلغ عنه، لذا ينتج
الحكم عن تصويت مرجَّح على سلوك التخزين داخل النافذة الخاصة — أخطاء نظام الملفات
الخاص بالأصل (origin private file system)، ومتانة التخزين، وخصوصيات كل منصة،
ويسهم كلٌّ منها في النتيجة.
إنها إشارة احتمالية لا يقين: تعامل معها كأحد المدخلات لا كحقيقة تُبنى عليها
القرارات وحدها. ولأن النوافذ الخاصة تمنع أيضًا ملف تعريف الارتباط _vid_t،
تُعرَّف الزيارة المتخفية من الإشارات وحدها، وتكون قيمة
identification.confidence لها أقل تبعًا لذلك.
يحدد كاشف التلاعب الزوار الذين عدّلوا متصفحهم لتحريف هويتهم:
navigator عبر مقارنة نماذج الجالبات الأولية (getter prototypes)PluginArray.prototype وMimeType.prototypeFunction.prototype.toString وObject.getOwnPropertyDescriptor ودوال حرجة أخرى قد استُبدلت بوسطاء (Proxies)يقيس anomalyScore (0.0-1.0) درجة عدم الاتساق. القيم فوق 0.5 تشير إلى تلاعب كبير.
يحمل كائن الـ webhook المسمى decision المخاطرة المجمَّعة للطلب:
decision.riskScore (عدد صحيح 0-100)، وdecision.suspectScore (رقم)، و
decision.action (الإجراء الموصى به). تجمع الدرجة مخرجات إشارات Smart Signals؛
تصف النطاقات أدناه كيفية تعيين riskScore إلى مستويات المخاطرة:
| نطاق الدرجة | مستوى المخاطرة | المؤشرات النموذجية |
|---|---|---|
| 0-10 | عادي | إشارات نظيفة، زائر معروف، IP سكني |
| 11-30 | منخفض | تناقضات طفيفة، IP مركز بيانات، أو زيارة أولى |
| 31-60 | متوسط | اكتشاف VPN، تلاعب بالمتصفح، أو سرعة غير معتادة |
| 61-80 | مرتفع | إشارات مخاطرة متعددة، وكيل + تلاعب، نشاط مرتفع |
| 81-100 | حرِج | اكتشاف بوت، عُقدة خروج Tor، أو حالات شذوذ حادة |
تجمع الدرجة مخرجات إشارات Smart Signals النشطة — بشكل أساسي استخبارات IP (VPN/الوكيل/Tor/مركز البيانات)، وحكم البوت، والتلاعب بالمتصفح. التفاعل البشري المؤكد (الفأرة/لوحة المفاتيح) يخفّض الدرجة.
تُكتشف أربعة تكوينات متصفح مرتكزة على الخصوصية:
| المتصفح | طريقة الاكتشاف | العتبة |
|---|---|---|
| Tor Browser | حظر Canvas + حظر WebGL + منطقة UTC الزمنية + خطوط محدودة + حجم شاشة مُقرَّب | 3+ علامات |
| Brave | Brave UA أو navigator.brave أو علامة "Brave" في Client Hints | علامة 1+ |
| Firefox ETP (صارم) | تقسيم التخزين أو مقاومة Canvas (يتطلب Firefox UA) | علامة 1+ |
| Safari ITP | حظر ملفات تعريف الارتباط أو تقييد 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}