TRACIO هو نظام تعريف قائم على بنية العميل والخادم (client-server). يجمع العميل إشارات المتصفح ويرسلها إلى الخادم، الذي يحسب معرّفًا ثابتًا للزائر، ويشغّل خوارزميات الكشف، ويعيد نتائج مُثراة. يشرح هذا القسم كل مرحلة من مراحل خط المعالجة (pipeline).
Browser TRACIO Cloud | | |-- Tracio.init({ publicKey }) ---------> | (init, no network) | | |-- tracio.getResult() ----------------> | | 1. Collect 130+ browser signals | | 2. Encrypt (XOR + deflate + B64) | | 3. POST to ingress endpoint | | | | |-- Decrypt & extract signals | |-- Compute visitor ID (MurmurHash3-128) | |-- Run bot detection (weighted scoring) | |-- Run smart signals (server-side enrichment) | |-- Run IP intelligence (VPN/proxy/Tor) | |-- Store visit event | | |<-- JSON response ------------------- | | visitorId, confidence, | | bot detection, smart signals | | | |-- Store visitor cookie (_vid_t) -----> | (365-day persistence)عند استدعاء tracio.getResult()، يجمع العميل أكثر من 130 إشارة متصفح مميّزة، منظّمة في طبقات (tiers). يستخدم الجمع خط معالجة متعدد المراحل مع Web Workers وإطارات iframe مشتركة لأجل الأداء.
| الفئة | عدد الإشارات | أمثلة |
|---|---|---|
| Canvas و WebGL | 9 | بصمة Canvas، معالج WebGL، معاملات WebGL، WebGPU |
| الصوت (Audio) | 3 | بصمة AudioContext، الكمون الأساسي، توقيت DRM |
| الخطوط والعرض (Fonts & Rendering) | 10 | كشف الخطوط، تفضيلات الخطوط، MathML، عرض الرموز التعبيرية |
| Navigator والمنصّة | 25 | User-Agent، اللغات، الشاشة، تزامن العتاد، المنطقة الزمنية |
| التخزين وملفات تعريف الارتباط (Storage & Cookies) | 10 | localStorage، sessionStorage، ملفات تعريف الارتباط، حصة التخزين |
| CSS واستعلامات الوسائط (Media Queries) | 10 | نظام الألوان، HDR، تقليل الحركة، الألوان القسرية |
| الشبكة و WebRTC | 3 | فحص TURN، زمن ذهاب-وإياب الاتصال (RTT)، إصدار التطبيق |
| كشف الروبوتات (Bot Detection) | 15 | علم Webdriver، أطر الأتمتة، طول eval |
| كشف العبث (Tamper Detection) | 8 | فحص getter الخصائص، سلاسل النماذج الأولية (prototype)، سلامة الدوال الأصلية |
| الامتدادات المخصّصة (Custom Extensions) | 14 | بصمة Math، كشف المعمارية، ميزات WASM |
يعمل خط معالجة الجمع على أربع مراحل لتقليل حجب الخيط الرئيسي (main thread):
المرحلة 1 (فوري): إشارات عالية الأولوية سريعة الجمع (خصائص navigator، الشاشة، المنطقة الزمنية). كما يبدأ فحص TURN هنا لأنه يُنفَّذ بالتوازي.
المرحلة 2 (Idle Callback): إشارات متزامنة تستفيد من فترة الخمول (استعلامات وسائط CSS، فحوص التخزين، اختبارات ملفات تعريف الارتباط).
المرحلة 3 (غير متزامن): إشارات تتطلب واجهات برمجية غير متزامنة أو عرضًا (canvas، WebGL، بصمة الصوت، كشف الخطوط، عرض الرموز التعبيرية).
Web Worker: جمع معزول للإشارات في خيط مخصّص (كشف ميزات WASM، doNotTrack).
يُنشأ إطار iframe مخفي مشترك مرة واحدة، ويُعاد استخدامه من قبل عدة مُجمِّعات (collectors) (الرموز التعبيرية، MathML، ألوان النظام، الخطوط، إطار الشاشة) لتجنّب عبء إنشاء إطارات iframe منفصلة لكل إشارة.
يتبع كل إشارة بنية موحّدة:
interface Signal<T> { s: number // Status code v: T // Value (when successful)}رموز الحالة:
| الرمز | المعنى |
|---|---|
0 | نجاح |
-1 | غير متاح (الخاصية undefined) |
-2 | فشل الفحص الثانوي |
-3 | سلوك غير متوقع |
-4 | انتهاء المهلة |
-5 | معطّل |
-6 | محجوب بواسطة CSP |
-7 | خطأ أمني |
تُسلسَل الإشارات المجموعة إلى JSON، ثم تُشفَّر وتُضغط قبل الإرسال:
تسلسل JSON: تُحزَّم جميع قيم الإشارات في كائن JSON مفهرس حسب الإشارة، بالإضافة إلى حقول البيانات الوصفية (c لمفتاح API، t للوسم، lid للمعرّف المرتبط).
الضغط: إذا تجاوزت الحمولة (payload) 1024 بايت، تُضغط باستخدام CompressionStream("deflate-raw").
تشفير XOR: تُغلَّف الحمولة في مظروف تشفير:
ترميز Base64: تُرمَّز الحمولة المشفّرة بترميز Base64url وتُرسَل كجسم طلب POST.
يُرسَل الطلب إلى نقطة الدخول (ingress endpoint) مع معاملات استعلام لإصدار العميل ومفتاح API. تُضمَّن بيانات اعتماد CORS لإرسال ملفات تعريف الارتباط من الطرف الأول (first-party).
يستقبل الخادم الحمولة المشفّرة ويعالجها عبر عدة أنظمة فرعية:
يفكّ الخادم ترميز مظروف XOR، ويفكّ الضغط عند الحاجة، ويحلّل بيانات إشارات JSON. يُستخرَج رمز الحالة وقيمة كل إشارة ويُتحقَّق منهما.
يُحسَب معرّف الزائر باستخدام نهج التجزئة الطبقية (tiered hashing) (V3):
Tier 1 (Frozen): 20 base62 characters - Stable hardware signals that rarely change - Canvas, WebGL renderer, audio fingerprint, fonts - Provides long-term visitor identity
Tier 2 (Semi-stable): 10 base62 characters - Signals that change with browser updates - User-Agent data, Client Hints, plugins - Extensible without breaking Tier 1
Tier 3 (Volatile): 10 base62 characters - Signals that change frequently - Screen resolution, timezone, language - Used for confidence scoring, not identityتستخرج كل طبقة إشاراتها المخصّصة، وتبني سلسلة قانونية (canonical string)، وتجزّئها باستخدام MurmurHash3-x64-128. تُسلسَل تجزئات الطبقات الثلاث وتُرمَّز بترميز base62 لإنتاج معرّف الزائر النهائي.
تشير درجة الثقة (0.0 إلى 1.0) إلى مدى تأكّد النظام من أن هذا الزائر قد جرى تعريفه بشكل صحيح:
_vid_t، تكون الثقة قصوى.يشغّل محرّك كشف الروبوتات عدة كواشف تُدمَج مخرجاتها المرجّحة في درجة روبوت (bot score) (العتبات: bot ≥ 0.70، suspicious ≥ 0.30؛ تفرض إشارة الفشل القاطع (hard-fail) حكمًا بأنه روبوت). تشمل الكواشف المساهمة:
تُحسَب إشارات الإثراء من جانب الخادم من بيانات الإشارات الخام وذكاء عناوين IP. وتشمل كشف VPN/الوكيل (proxy)/Tor، والموقع الجغرافي لعنوان IP، وتحليل عبث المتصفح، وتسجيل درجة الاشتباه.
يوفّر النظام الفرعي لذكاء عناوين IP:
يعيد الخادم استجابة JSON تحتوي على:
{ "visitorId": "X7fh2Hg9LkMn3pQr", "bot": { "detected": false, "confidence": 2, "reasons": [] }}هذه هي النتيجة التي يُفضي إليها tracio.getResult() في المتصفح. أما الحدث
الكامل المُثرى — بما في ذلك bot_result القانوني
(human / bot / uncertain)، والموقع الجغرافي، والإشارات الذكية — فيُسلَّم
من جانب الخادم عبر webhooks ويُعرَض في
لوحة التحكم.
يخزّن العميل رمز زائر في كل من ملف تعريف ارتباط من الطرف الأول (صلاحية 365 يومًا، SameSite=Lax) و localStorage للاستمرارية عبر الجلسات.
| الخطوة | الموقع | المدة | الوصف |
|---|---|---|---|
| 1 | المتصفح | ~5ms | تهيئة الوكيل، إنشاء إطار iframe مشترك |
| 2 | المتصفح | ~50-150ms | جمع أكثر من 130 إشارة (بالتوازي، متعدد المراحل) |
| 3 | المتصفح | ~5ms | تشفير الحمولة وضغطها |
| 4 | الشبكة | ~10-50ms | POST إلى الخادم |
| 5 | الخادم | ~5-20ms | فك التشفير، استخراج الإشارات، حساب معرّف الزائر |
| 6 | الخادم | ~5-15ms | تشغيل كشف الروبوتات والإشارات الذكية |
| 7 | الخادم | ~5ms | بناء الاستجابة |
| 8 | الشبكة | ~10-50ms | إعادة استجابة JSON |
| 9 | المتصفح | ~1ms | تخزين ملف تعريف ارتباط الزائر |
إجمالي زمن الذهاب والإياب: عادةً 80-300ms حسب ظروف الشبكة وقدرات المتصفح.