TRACIO bir istemci-sunucu tanımlama sistemidir. İstemci tarayıcı sinyallerini toplar ve bunları sunucuya gönderir; sunucu kararlı bir ziyaretçi tanımlayıcısı hesaplar, tespit algoritmalarını çalıştırır ve zenginleştirilmiş sonuçları döndürür. Bu bölüm, işlem hattının her aşamasını açıklar.
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() çağrıldığında, istemci tiers halinde organize edilmiş 130+ farklı tarayıcı sinyali toplar. Toplama işlemi, performans için Web Worker'lar ve paylaşımlı iframe'ler kullanan çok aşamalı bir işlem hattı kullanır.
| Kategori | Sinyal Sayısı | Örnekler |
|---|---|---|
| Canvas & WebGL | 9 | Canvas parmak izi, WebGL renderer, WebGL parametreleri, WebGPU |
| Audio | 3 | AudioContext parmak izi, temel gecikme, DRM zamanlaması |
| Yazı Tipleri & Render | 10 | Yazı tipi tespiti, yazı tipi tercihleri, MathML, emoji render'ı |
| Navigator & Platform | 25 | User-Agent, diller, ekran, hardware concurrency, saat dilimi |
| Storage & Cookies | 10 | localStorage, sessionStorage, çerezler, storage kotası |
| CSS & Media Queries | 10 | Renk şeması, HDR, reduced motion, forced colors |
| Ağ & WebRTC | 3 | TURN probe, bağlantı RTT'si, uygulama sürümü |
| Bot Detection | 15 | Webdriver bayrağı, otomasyon framework'leri, eval uzunluğu |
| Tamper Detection | 8 | Property getter incelemesi, prototip zincirleri, native function bütünlüğü |
| Custom Extensions | 14 | Math parmak izi, mimari tespiti, WASM özellikleri |
Toplama işlem hattı, ana iş parçacığının (main thread) bloke olmasını en aza indirmek için dört aşamada çalışır:
Aşama 1 (Anlık): Toplanması hızlı olan yüksek öncelikli sinyaller (navigator özellikleri, ekran, saat dilimi). TURN probe da eşzamanlı çalıştığı için burada başlar.
Aşama 2 (Idle Callback): Bir boşta bekleme (idle) süresinden fayda sağlayan senkron sinyaller (CSS media query'leri, storage probe'ları, çerez testleri).
Aşama 3 (Async): Asenkron API'ler veya render gerektiren sinyaller (canvas, WebGL, audio parmak izi, yazı tipi tespiti, emoji render'ı).
Web Worker: Özel bir iş parçacığında izole sinyal toplama (WASM özellik tespiti, doNotTrack).
Paylaşımlı gizli bir iframe bir kez oluşturulur ve sinyal başına ayrı iframe'ler oluşturmanın getirdiği ek yükten kaçınmak için birden fazla collector tarafından yeniden kullanılır (emoji, MathML, sistem renkleri, yazı tipleri, ekran çerçevesi).
Her sinyal tutarlı bir yapı izler:
interface Signal<T> { s: number // Status code v: T // Value (when successful)}Durum kodları:
| Kod | Anlamı |
|---|---|
0 | Başarılı |
-1 | Kullanılamıyor (özellik undefined) |
-2 | İkincil kontrol başarısız |
-3 | Beklenmeyen davranış |
-4 | Timeout |
-5 | Devre dışı |
-6 | CSP tarafından engellendi |
-7 | Güvenlik hatası |
Toplanan sinyaller JSON'a serileştirilir, ardından aktarımdan önce şifrelenir ve sıkıştırılır:
JSON serileştirme: Tüm sinyal değerleri, sinyale göre anahtarlanan bir JSON nesnesine paketlenir; ayrıca metadata alanları eklenir (c API anahtarı için, t tag için, lid bağlı ID için).
Sıkıştırma: Payload 1024 baytı aşarsa, CompressionStream("deflate-raw") kullanılarak sıkıştırılır.
XOR şifreleme: Payload bir şifreleme zarfına sarılır:
Base64 kodlaması: Şifrelenmiş payload Base64url ile kodlanır ve POST gövdesi olarak gönderilir.
İstek, istemci sürümü ve API anahtarı için query parametreleriyle birlikte ingress uç noktasına gönderilir. First-party çerezlerin gönderilmesi için CORS credentials dahil edilir.
Sunucu, şifrelenmiş payload'u alır ve birkaç alt sistem üzerinden işler:
Sunucu XOR zarfını çözer, gerekirse dekomprese eder ve JSON sinyal verilerini ayrıştırır. Her sinyalin durum kodu ve değeri çıkarılır ve doğrulanır.
Ziyaretçi ID'si, katmanlı hash'leme (tiered hashing) yaklaşımı (V3) kullanılarak hesaplanır:
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 identityHer tier kendisine atanmış sinyalleri çıkarır, kanonik bir string oluşturur ve bunu MurmurHash3-x64-128 ile hash'ler. Üç tier hash'i birleştirilir ve final ziyaretçi ID'sini üretmek için base62'de kodlanır.
Güven skoru (0.0 ile 1.0 arası), sistemin bu ziyaretçinin doğru şekilde tanımlandığından ne kadar emin olduğunu gösterir:
_vid_t çerezi eşleşirse, güven maksimumdur.Bot tespit motoru, ağırlıklı çıktıları bir bot skoruna birleştirilen birden fazla dedektör çalıştırır (eşikler: bot ≥ 0.70, suspicious ≥ 0.30; bir hard-fail sinyali bot kararını zorunlu kılar). Katkıda bulunan dedektörler şunları içerir:
Sunucu tarafı zenginleştirme sinyalleri, ham sinyal verilerinden ve IP zekasından hesaplanır. Bunlar VPN/proxy/Tor tespitini, IP coğrafi konumlandırmasını, tarayıcı kurcalama (tampering) analizini ve şüphe skorlamasını içerir.
IP zekası alt sistemi şunları sağlar:
Sunucu, şunları içeren bir JSON yanıtı döndürür:
{ "visitorId": "X7fh2Hg9LkMn3pQr", "bot": { "detected": false, "confidence": 2, "reasons": [] }}Bu, tracio.getResult() çağrısının tarayıcıda çözümlendiği sonuçtur. Kanonik
bot_result (human / bot / uncertain), coğrafi konum ve smart signal'ları da
içeren tam, zenginleştirilmiş olay, sunucu tarafında
webhook'lar aracılığıyla iletilir ve dashboard'da gösterilir.
İstemci, oturumlar arası kalıcılık için bir ziyaretçi token'ını hem first-party bir çerezde (365 günlük geçerlilik, SameSite=Lax) hem de localStorage'da saklar.
| Adım | Konum | Süre | Açıklama |
|---|---|---|---|
| 1 | Browser | ~5ms | Ajanı başlat, paylaşımlı iframe oluştur |
| 2 | Browser | ~50-150ms | 130+ sinyal topla (paralel, çok aşamalı) |
| 3 | Browser | ~5ms | Payload'u şifrele ve sıkıştır |
| 4 | Network | ~10-50ms | Sunucuya POST |
| 5 | Server | ~5-20ms | Şifreyi çöz, sinyalleri çıkar, ziyaretçi ID hesapla |
| 6 | Server | ~5-15ms | Bot detection ve smart signal'ları çalıştır |
| 7 | Server | ~5ms | Yanıtı oluştur |
| 8 | Network | ~10-50ms | JSON yanıtı döndür |
| 9 | Browser | ~1ms | Ziyaretçi çerezini sakla |
Toplam gidiş-dönüş (round-trip): Ağ koşullarına ve tarayıcı yeteneklerine bağlı olarak tipik olarak 80-300ms.