זיהוי הבוטים של TRACIO מזהה דפדפנים אוטומטיים, כלים headless ומתקפות מבוססות-סקריפט באמצעות ארכיטקטורה דו-שכבתית: איסוף בצד הלקוח בתוך סוכן הדפדפן וניתוח בצד השרת. הוא מכסה מסגרות אוטומציה נפוצות, דפדפנים headless, סוכני גלישה מבוססי AI ודפדפני anti-detect עם כמעט אפס תוצאות חיוביות שגויות, ובמקביל מוסיף אוטומטית סורקי מנועי חיפוש לגיטימיים לרשימת ההיתר.
סוכן הדפדפן מריץ מערך רחב של בדיקות ומדווח על תוצאותיהן. בשרת התוצאות משוקללות לכדי
ציון בוט, והציון ממופה להכרעה. מספר קטן של מחוונים חד-משמעיים מכריע בפני עצמו וכופה
את ההכרעה bot ללא תלות בשאר.
אילו בדיקות רצות, כיצד הן משוקללות והיכן עוברים הספים — אינם מתפרסמים, בשום תוכנית. תיעוד שלהם היה אומר למפעילי בוטים בדיוק מה לשנות כדי לעקוף את ההגנה. מה שאתם מקבלים במקום זאת הוא ההכרעה, תווית של סוג הבוט, ובתוכנית Business ומעלה גם קודי סיבה המציינים את מחלקת התצפית שמאחורי ההחלטה.
כל זיהוי נושא הכרעה בנוגע לבוט. היא מגיעה אליכם כ-bot.result במטען ה-Webhook
וכ-result.bot ב-SDK של הלקוח.
| תוצאה | תיאור |
|---|---|
human | לא נמצאו מחווני אוטומציה. גם סורקי מנועי חיפוש מאומתים נפתרים ל-human. |
bot | זוהתה גישה אוטומטית או מבוססת-סקריפט. מלווה בתווית bot.type. |
uncertain | אותות מעורבים או חלשים — לא אדם באופן ברור ולא אוטומציה באופן ברור. |
זה ממופה לשדה ההחלטה העסקית decision.action (real, fake או suspicious)
המשמש בכל לוח הבקרה ובמטען ה-Webhook.
את ההכרעה מלווה bot.score. בגרסה 2 של מטען ה-Webhook זהו מספר עשרוני בסולם
0..100 — אותו מספר שלוח הבקרה מציג לאותה ביקורת. (בסכמת גרסה 1 המוקפאת זהו שבר
בסולם 0..1; ראו Webhooks.)
השדה bot.type קיים כאשר התוצאה היא bot. זהו שם של בוט או סביבת ריצה מזוהים,
או משפחה כאשר ציון הבדיקה הספציפית היה חושף את פנימיות מנגנון הזיהוי:
bot.type | משמעות |
|---|---|
playwright, jsdom, electron | סביבת ריצת האוטומציה הנקובה זוהתה |
browser_use, claude_computer_use, skyvern, genspark, fellou | סוכן הגלישה מבוסס ה-AI הנקוב זוהה |
automation | כלי אוטומציה, ללא ציון הבדיקה הספציפית |
headless | דפדפן הרץ ללא ממשק משתמש |
antidetect | בניית anti-detect המזייפת טביעת אצבע |
extension | הרחבת דפדפן המפעילה אוטומציה, פרוקסי או VPN |
privacy_browser | בניית דפדפן מוקשחת לפרטיות (למשל Mullvad Browser) |
other | זוהה, אך מחוץ לאוצר המילים המפורסם |
הרשימה סגורה בכוונה: בדיקה שתתווסף למנגנון הזיהוי מחר תופיע כ-other במקום לדלוף
בשמה הפנימי. התייחסו ל-bot.type כאל תווית שמסתעפים לפיה, ולא כאל enum ממצה לאימות
— סביבות ריצה נקובות חדשות נוספות עם הזמן.
בתוכניות Business ו-Enterprise מטען ה-Webhook נושא מערך reasons — שמונה רשומות
לכל היותר, ממוינות לפי חשיבות. הקוד מציין את מחלקת התצפית, ולעולם לא את הבדיקה
שמאחוריה:
| קוד | מה משמעותו |
|---|---|
automation_signature | עקבות של כלי אוטומציה |
headless_browser | דפדפן ללא ממשק משתמש |
anonymous_browser | בנייה מוקשחת לפרטיות או anti-detect שנועדה להיראות רגילה |
privacy_hardening | הגדרות פרטיות אגרסיביות |
behavior_anomaly | דפוסי אינטראקציה לא-אנושיים |
fingerprint_tampering | ערכים שאמורים להתיישב זה עם זה אינם מתיישבים |
environment_anomaly | סביבת הריצה סותרת את עצמה |
identity_mismatch | הזהות המוצהרת אינה עולה בקנה אחד עם הנצפה |
virtual_environment | אמולטור במקום חומרה פיזית |
strong_automation_evidence | מחווני בוט חד-משמעיים — מכריעים בפני עצמם |
detection_signal | בדיקות נוספות שנורו |
הערך severity הוא high, medium או low, והוא החלק מן ההכרעה שמחלקה זו
אחראית לו בביקורת הזו — לא תכונה קבועה של הקוד. אותו קוד עשוי להגיע כ-high
בביקורת אחת וכ-low באחרת, אז אל תשמרו אותו במטמון כקבוע.
privacy_hardening מחייב זהירות מיוחדת: הוא נורה עבור מבקרים רגילים שמקפידים על
פרטיות באותה מידה שהוא נורה עבור התחמקות. שקללו אותו יחד עם השאר במקום לפעול לפיו
לבדו.
virtual_environment מגיע מזיהוי אמולטורים. בוובּ אין הכרעה נפרדת של «ריצה תחת
היפרוויזר»: הרמזים שדפדפן מסוגל לראות — מנוע רינדור תוכנה גנרי, מספר ליבות נמוך
באופן חריג — מופיעים באותה תדירות גם במחשבים רגילים ללא מנהל התקן GPU וגם בתוך
הפעלות של שולחן עבודה מרוחק, ולכן איננו הופכים אותם להכרעה שתצטרכו לפקפק בה.
| יכולת | זמינות |
|---|---|
| זיהוי אוטומציה, headless וסוכני AI | כל התוכניות |
| רשימת היתר לסורקים מאומתים | כל התוכניות |
| זיהוי אמולטורים | כל התוכניות |
מחווני anti-detect (bot.antidetectScore, 0..100) | Pro ומעלה |
| קודי סיבה, בלוק התנהגותי | Business ומעלה |
| זיהוי DevTools | Business ומעלה |
ציון ה-anti-detect עדיין בכיול.
bot.antidetectScoreמדווח כדי שתוכלו לעקוב אחריו ולכוונן מדיניות משלכם — התייחסו אליו כאל קלט להחלטת הסיכון שלכם, ולא כאל עילה עצמאית לחסימה.
בדיקות ייעודיות למובייל אינן אפקטיביות בוובּ. זיהוי root, jailbreak, אפליקציות משוכפלות/כפולות ו-Frida נשען על אותות נייטיביים שדפדפן אינו יכול לאסוף. TRACIO מספקת ערכות SDK לדפדפן בלבד, ולכן הסתמכו על הכרעות האוטומציה, headless, סוכני AI, anti-detect, אמולטורים וההתנהגות — שפעילות במלואן בוובּ.
בוטים טובים מוכרים מזוהים לפי ה-user-agent שלהם, ולאחר מכן מאומתים מול כתובת ה-IP המתחברת: שאילתת DNS הפוכה על הכתובת, בדיקה ששם המארח שהתקבל שייך לדומיין של המפעיל, ושאילתה קדימה המאשרת שהוא נפתר בחזרה לאותה כתובת. זהו בדיוק נוהל האימות שמפעילי הסורקים עצמם מפרסמים.
| סורק | דומיינים מאומתים |
|---|---|
.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 |
סורק מאומת נפתר ל-human. בקשה הטוענת שהיא Googlebot בזמן שכתובת ה-IP שלה שייכת
באופן מוכח למישהו אחר מסווגת כבוט — ואילו שאילתה שפשוט חסרה או שפג זמנה אינה נחשבת
הוכחה לזיוף.
דינמיקת האינטראקציה — תנועת מצביע, קצב הקלדה, גלילה — מזינה את ההכרעה כראיה לשאלה
האם נוכח אדם, ולא לשאלה איזה אדם. בתוכנית Business ומעלה הצבירה נמסרת בבלוק
behavior של ה-Webhook:
{ "behavior": { "score": 87, "verdict": "human", "confidence": 0.92 }}score נע בסולם 0..100 (גבוה יותר = אנושי יותר), verdict הוא human,
uncertain או bot, ו-confidence (0..1) אומר על כמה ראיות ההכרעה נשענת —
ביקורת קצרה עם שתי תנועות מצביע מקבלת כאן ערך נמוך גם כשההכרעה נראית נחרצת.
הבלוק קיים רק כאשר ניקוד התנהגותי אכן רץ עבור אותה ביקורת. היעדר הבלוק פירושו «אין נתונים», ולעולם לא «אין שום דבר חשוד» — אל תקראו את היעדרו כאות נקי.
ה-SDK של הלקוח חושף ערך בוליאני נוח, result.bot.detected, ולצידו confidence
בסולם 0..100:
const result = await tracio.getResult()
if (result.bot.detected) { console.warn(`Bot detected (confidence ${result.bot.confidence})`) showCaptcha() return}
await login(credentials)בשרת שלכם, פעלו לפי מסירת ה-Webhook. ההכרעה בנוגע לבוט נמצאת
באובייקט bot — bot.result ו-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")})ערכי אפס וערכים ריקים מושמטים מן המטען, לכן קראו את bot.type בזהירות במקום לדרוש
אותו בסכמות שלכם.
זיהוי הבוטים של TRACIO תוכנן לכמעט אפס תוצאות חיוביות שגויות, אך קיימים מקרי קצה:
| תרחיש | סיכון | הפחתה |
|---|---|---|
הרחבות דפדפן המשנות את navigator | נמוך | אימות צולב על פני בדיקות רבות מונע הפעלה על סמך בדיקה בודדת |
| תוכנת אבטחה ארגונית | נמוך מאוד | סיווג כ-headless מחייב ראיות תומכות |
| כלי נגישות | אין | ממשקי הנגישות אינם מזינים את זיהוי הבוטים |
| משתמשי VPN/פרוקסי | אין | דגלי רשת נמעקבים בנפרד מן ההכרעה בנוגע לבוט |
אם אתם רואים תוצאות חיוביות שגויות, בחנו את bot.type (ובתוכנית Business ומעלה גם
את reasons) כדי להבין איזו מחלקת תצפית נורתה, והתאימו את המדיניות שלכם. הסיבות
הנפוצות מפורטות בעמוד פתרון תקלות.