TRACIO'nun bot tespiti; otomatikleştirilmiş tarayıcıları, headless araçları ve betiğe dayalı saldırıları iki katmanlı bir mimariyle belirler: tarayıcı ajanında istemci tarafı toplama ve sunucu tarafı analiz. Yaygın otomasyon framework'lerini, headless tarayıcıları, web'de gezinen yapay zeka ajanlarını ve anti-detect tarayıcıları neredeyse sıfır yanlış pozitifle kapsarken meşru arama motoru crawler'larını otomatik olarak allowlist'e alır.
Tarayıcı ajanı geniş bir kontrol kümesi çalıştırır ve sonuçlarını bildirir. Sunucuda
bu sonuçlar ağırlıklandırılarak bot skoruna dönüştürülür, skor da bir karara eşlenir.
Az sayıda kesin gösterge tek başına belirleyicidir ve geri kalanına bakılmaksızın
bot kararını zorlar.
Hangi kontrollerin çalıştığı, nasıl ağırlıklandırıldığı ve eşiklerin nerede durduğu yayımlanmaz — hiçbir planda. Bunları belgelemek, bot operatörlerine korumayı aşmak için tam olarak neyi değiştirmeleri gerektiğini söylerdi. Bunun yerine size kararı, bot türü etiketini ve — Business ve üzeri planlarda — kararın arkasındaki gözlem sınıfını adlandıran neden kodlarını veriyoruz.
Her kimlik tespiti bir bot kararı taşır. Size webhook payload'ında
bot.result, istemci SDK'sında ise result.bot olarak ulaşır.
| Sonuç | Açıklama |
|---|---|
human | Otomasyon göstergesi bulunmadı. Doğrulanmış arama motoru crawler'ları da human olarak çözümlenir. |
bot | Otomatikleştirilmiş veya betiğe dayalı erişim tespit edildi. Yanında bir bot.type etiketi gelir. |
uncertain | Karışık ya da zayıf sinyaller — ne açıkça insan ne de açıkça otomasyon. |
Bu, panelde ve webhook payload'ında kullanılan iş kararı alanı decision.action
(real, fake veya suspicious) ile eşleşir.
Karara bot.score eşlik eder. Webhook payload'ının 2. sürümünde bu, 0..100
ölçeğinde ondalıklı bir sayıdır — panelin o ziyaret için gösterdiği sayının aynısı.
(Dondurulmuş 1. sürüm şemasında 0..1 aralığında bir kesirdir; bkz.
Webhooks.)
Sonuç bot olduğunda bot.type bulunur. Bu ya tanınan bir botun veya çalışma
zamanının adıdır ya da belirli bir kontrolü adlandırmak dedektörün iç işleyişini
ele verecekse bir aile etiketidir:
bot.type | Anlamı |
|---|---|
playwright, jsdom, electron | Adı geçen otomasyon çalışma zamanı belirlendi |
browser_use, claude_computer_use, skyvern, genspark, fellou | Adı geçen, web'de gezinen yapay zeka ajanı belirlendi |
automation | Otomasyon araçları; belirli kontrol adlandırılmadan |
headless | Kullanıcı arayüzü olmadan çalışan tarayıcı |
antidetect | Parmak izi taklit eden bir anti-detect derlemesi |
extension | Otomasyon, proxy veya VPN yürüten bir tarayıcı uzantısı |
privacy_browser | Gizlilik açısından sıkılaştırılmış tarayıcı derlemesi (örneğin Mullvad Browser) |
other | Tespit edildi, ancak yayımlanmış sözlüğün dışında |
Liste bilinçli olarak kapalıdır: yarın dedektöre eklenen bir kontrol, iç adını sızdırmak
yerine other olarak görünür. bot.type değerini dallanma yapacağınız bir etiket
olarak ele alın, doğrulama yapacağınız eksiksiz bir enum olarak değil — yeni adlandırılmış
çalışma zamanları zamanla eklenir.
Business ve Enterprise planlarında webhook payload'ı bir reasons dizisi taşır —
önem sırasına göre sıralanmış en fazla sekiz kayıt. Kod, gözlemin sınıfını
adlandırır, arkasındaki kontrolü asla:
| Kod | Ne anlama gelir |
|---|---|
automation_signature | Otomasyon araçlarının izleri |
headless_browser | Kullanıcı arayüzü olmayan bir tarayıcı |
anonymous_browser | Sıradan görünmek üzere hazırlanmış, gizliliği sıkılaştırılmış ya da anti-detect bir derleme |
privacy_hardening | Agresif gizlilik ayarları |
behavior_anomaly | İnsana ait olmayan etkileşim örüntüleri |
fingerprint_tampering | Birbiriyle uyuşması gereken değerler uyuşmuyor |
environment_anomaly | Çalışma ortamı kendi içinde tutarsız |
identity_mismatch | Beyan edilen kimlik gözlemlenenle uyuşmuyor |
virtual_environment | Fiziksel donanım yerine emülatör |
strong_automation_evidence | Kesin bot göstergeleri — tek başına belirleyici |
detection_signal | Tetiklenen diğer kontroller |
severity değeri high, medium veya low olur ve bu ziyarette kararın ne
kadarının bu sınıfa düştüğünü gösterir — kodun sabit bir özelliği değildir. Aynı
kod bir ziyarette high, bir başkasında low olarak gelebilir; bu yüzden onu sabit
gibi önbelleğe almayın.
privacy_hardening ayrı bir dikkat ister: kaçınma amaçlı kullanımlarda olduğu kadar
gizliliğine düşkün sıradan ziyaretçilerde de tetiklenir. Tek başına harekete geçmek
yerine geri kalanla birlikte değerlendirin.
virtual_environment, emülatör tespitinden gelir. Web'de ayrı bir "hipervizör altında
çalışıyor" kararı yoktur: bir tarayıcının görebildiği ipuçları — genel amaçlı bir
yazılım işleyici, olağandışı düşük çekirdek sayısı — GPU sürücüsü bulunmayan sıradan
makinelerde ve uzak masaüstü oturumlarında da en az o kadar sık görülür; bu yüzden
onları, sonradan sorgulamak zorunda kalacağınız bir karara dönüştürmüyoruz.
| Yetenek | Kullanılabilirlik |
|---|---|
| Otomasyon, headless ve yapay zeka ajanı tespiti | Tüm planlar |
| Doğrulanmış crawler allowlist'i | Tüm planlar |
| Emülatör tespiti | Tüm planlar |
Anti-detect göstergeleri (bot.antidetectScore, 0..100) | Pro ve üzeri |
| Neden kodları, davranış bloğu | Business ve üzeri |
| DevTools tespiti | Business ve üzeri |
Anti-detect skorlaması hâlâ kalibre ediliyor.
bot.antidetectScore, gözlemleyip kendi politikanızı ayarlayabilesiniz diye raporlanır — onu risk kararınıza giren bir girdi olarak görün, tek başına engelleme gerekçesi olarak değil.
Yalnızca mobile özgü kontroller web'de işe yaramaz. Root, jailbreak, klonlanmış/çift uygulama ve Frida tespiti, bir tarayıcının toplayamayacağı yerel mobil sinyallere dayanır. TRACIO yalnızca tarayıcı SDK'ları sunar; bu nedenle web'de tümüyle etkin olan otomasyon, headless, yapay zeka ajanı, anti-detect, emülatör ve davranış kararlarına dayanın.
Bilinen iyi botlar önce user-agent'larından tanınır, ardından bağlandıkları IP adresine karşı doğrulanır: IP için ters DNS sorgusu, elde edilen ana makine adının operatörün alan adına ait olduğunun kontrolü ve aynı IP'ye geri çözümlendiğini doğrulayan ileri yönlü sorgu. Bu, crawler operatörlerinin kendilerinin yayımladığı doğrulama yordamıdır.
| Crawler | Doğrulanan alan adları |
|---|---|
.googlebot.com, .google.com | |
| Bing | .search.msn.com |
| Apple | .applebot.apple.com |
| Yahoo | .crawl.yahoo.net |
| Yandex | .yandex.com, .yandex.net, .yandex.ru |
| DuckDuckGo | .duckduckgo.com |
Doğrulanmış bir crawler human olarak çözümlenir. Googlebot olduğunu ileri sürerken
IP'si kanıtlanabilir biçimde başkasına ait olan bir istek bot olarak sınıflandırılır
— yalnızca eksik kalmış veya zaman aşımına uğramış bir sorgu, sahtecilik kanıtı
sayılmaz.
Etkileşim dinamikleri — işaretçi hareketi, klavye temposu, kaydırma — karara
bir insanın hazır bulunup bulunmadığının kanıtı olarak katkı verir, hangi insan
olduğunun kanıtı olarak değil. Business ve üzeri planlarda toplu sonuç webhook'un
behavior bloğunda iletilir:
{ "behavior": { "score": 87, "verdict": "human", "confidence": 0.92 }}score 0..100 aralığındadır (yüksek = daha insana yakın), verdict human,
uncertain veya bot olur, confidence (0..1) ise kararın ne kadar kanıta
dayandığını söyler — iki işaretçi hareketiyle geçen kısa bir ziyaret, karar kesin
görünse bile burada düşük değer alır.
Blok yalnızca o ziyaret için davranış skorlaması gerçekten çalıştıysa bulunur. Bloğun olmaması "veri yok" demektir, asla "şüpheli bir şey yok" değil — yokluğunu temiz bir sinyal olarak okumayın.
İstemci SDK'sı kullanışlı bir boolean olan result.bot.detected ile 0..100
ölçeğinde bir confidence değeri sunar:
const result = await tracio.getResult()
if (result.bot.detected) { console.warn(`Bot detected (confidence ${result.bot.confidence})`) showCaptcha() return}
await login(credentials)Kendi sunucunuzda webhook teslimatına göre hareket edin. Bot kararı
bot nesnesinde bulunur — bot.result ve bot.type:
// `event` is the webhook delivery body (/docs/webhooks)app.post("/webhook/tracio", async (req, res) => { const event = req.body
if (event.bot?.result === "bot") { await db.blockedRequests.insert({ visitorId: event.visitorId, botType: event.bot.type, ip: event.ip, timestamp: new Date(), }) }
res.status(200).send("OK")})Sıfır ve boş değerler payload'dan çıkarılır; bu yüzden bot.type alanını şemanızda
zorunlu kılmak yerine savunmacı biçimde okuyun.
TRACIO'nun bot tespiti neredeyse sıfır yanlış pozitif verecek şekilde tasarlanmıştır, ancak sınır durumlar vardır:
| Senaryo | Risk | Azaltıcı önlem |
|---|---|---|
navigator nesnesini değiştiren tarayıcı uzantıları | Düşük | Çok sayıda kontrol üzerinden çapraz doğrulama, tek kontrolün tetiklemesini engeller |
| Kurumsal güvenlik yazılımı | Çok düşük | Headless sınıflandırması destekleyici kanıt ister |
| Erişilebilirlik araçları | Yok | Erişilebilirlik API'leri bot tespitini beslemez |
| VPN/proxy kullanıcıları | Yok | Ağ bayrakları bot kararından ayrı izlenir |
Yanlış pozitif görüyorsanız hangi gözlem sınıfının tetiklendiğini anlamak için
bot.type alanını (Business ve üzerinde ayrıca reasons dizisini) inceleyin ve
politikanızı ona göre ayarlayın. Sık rastlanan nedenler için
Sorun Giderme sayfasına bakın.