Bộ phát hiện bot của TRACIO nhận diện trình duyệt tự động, công cụ headless và các cuộc tấn công bằng kịch bản nhờ kiến trúc hai lớp: thu thập phía máy khách trong trình duyệt và phân tích phía máy chủ. Nó bao phủ các framework tự động hóa phổ biến, trình duyệt headless, tác tử duyệt web AI và trình duyệt anti-detect với tỷ lệ dương tính giả gần bằng không, đồng thời tự động đưa các trình thu thập dữ liệu hợp lệ của công cụ tìm kiếm vào danh sách trắng.
Trình duyệt chạy một tập hợp kiểm tra rộng và báo cáo kết quả của chúng. Trên máy chủ,
các kết quả này được gán trọng số để tạo thành điểm bot, và điểm số được ánh xạ sang
một phán quyết. Một số ít chỉ dấu rõ ràng tự thân đã mang tính quyết định và buộc phán
quyết thành bot bất kể phần còn lại.
Những kiểm tra nào được chạy, chúng được gán trọng số ra sao và ngưỡng nằm ở đâu đều không được công bố — trên bất kỳ gói nào. Ghi lại chúng trong tài liệu đồng nghĩa với việc chỉ cho người vận hành bot biết chính xác cần thay đổi điều gì để vượt qua lớp bảo vệ. Thay vào đó, bạn nhận được phán quyết, nhãn loại bot và — từ gói Business trở lên — mã lý do cho biết lớp quan sát đứng sau quyết định đó.
Mỗi lần nhận diện đều mang theo một phán quyết về bot. Nó đến với bạn dưới dạng
bot.result trong payload webhook và dưới dạng result.bot trong
SDK máy khách.
| Kết quả | Mô tả |
|---|---|
human | Không tìm thấy dấu hiệu tự động hóa. Trình thu thập dữ liệu đã xác minh cũng cho ra human. |
bot | Phát hiện truy cập tự động hoặc bằng kịch bản. Kèm theo là nhãn bot.type. |
uncertain | Tín hiệu lẫn lộn hoặc yếu — không rõ ràng là người, cũng không rõ ràng là tự động. |
Giá trị này ánh xạ sang trường nghiệp vụ decision.action (real, fake hoặc
suspicious) được dùng xuyên suốt dashboard và payload webhook.
bot.score đi kèm phán quyết. Ở payload webhook phiên bản 2, đó là số thập phân
0..100 — đúng con số mà dashboard hiển thị cho lượt truy cập đó. (Ở lược đồ phiên bản
1 đã đóng băng, đó là phân số 0..1; xem Webhooks.)
bot.type xuất hiện khi kết quả là bot. Nó là tên của một bot hoặc runtime đã được
nhận diện, hoặc là một họ khi việc gọi tên kiểm tra cụ thể sẽ để lộ cấu trúc bên
trong của bộ phát hiện:
bot.type | Ý nghĩa |
|---|---|
playwright, jsdom, electron | Đã nhận diện được runtime tự động hóa được nêu tên |
browser_use, claude_computer_use, skyvern, genspark, fellou | Đã nhận diện được tác tử duyệt web AI được nêu tên |
automation | Công cụ tự động hóa, không nêu tên kiểm tra cụ thể |
headless | Trình duyệt chạy không có giao diện người dùng |
antidetect | Bản dựng anti-detect / giả mạo dấu vân tay |
extension | Tiện ích mở rộng trình duyệt điều khiển tự động hóa, proxy hoặc VPN |
privacy_browser | Bản dựng trình duyệt tăng cường quyền riêng tư (ví dụ Mullvad Browser) |
other | Đã phát hiện, nhưng nằm ngoài từ vựng được công bố |
Danh sách này cố ý đóng: một kiểm tra được thêm vào bộ phát hiện ngày mai sẽ hiện ra
dưới dạng other thay vì làm lộ tên nội bộ của nó. Hãy xem bot.type như một nhãn để
rẽ nhánh, chứ không phải một enum đầy đủ để kiểm tra tính hợp lệ — các runtime được nêu
tên vẫn được bổ sung theo thời gian.
Trên gói Business và Enterprise, payload webhook mang theo mảng reasons — tối đa tám
mục, sắp xếp theo mức độ quan trọng. Mỗi mã cho biết lớp quan sát, không bao giờ cho
biết kiểm tra đứng sau nó:
| Mã | Ý nghĩa |
|---|---|
automation_signature | Dấu vết của công cụ tự động hóa |
headless_browser | Trình duyệt không có giao diện người dùng |
anonymous_browser | Bản dựng tăng cường quyền riêng tư hoặc anti-detect được làm cho trông bình thường |
privacy_hardening | Thiết lập quyền riêng tư ở mức quyết liệt |
behavior_anomaly | Mẫu tương tác không giống con người |
fingerprint_tampering | Những giá trị lẽ ra phải khớp nhau lại không khớp |
environment_anomaly | Môi trường runtime tự mâu thuẫn bên trong |
identity_mismatch | Danh tính được khai báo không khớp với những gì quan sát được |
virtual_environment | Trình giả lập thay vì phần cứng vật lý |
strong_automation_evidence | Chỉ dấu bot rõ ràng — tự thân đã mang tính quyết định |
detection_signal | Các kiểm tra khác đã kích hoạt |
severity nhận giá trị high, medium hoặc low, và đó là tỷ trọng mà lớp này
đóng góp vào phán quyết trong lượt truy cập này — không phải một thuộc tính cố định của
mã. Cùng một mã có thể đến với mức high ở lượt truy cập này và low ở lượt khác,
vì vậy đừng lưu nó như một hằng số.
privacy_hardening cần đặc biệt thận trọng: nó kích hoạt với những khách truy cập bình
thường quan tâm đến quyền riêng tư nhiều không kém gì với hành vi né tránh. Hãy cân
nhắc nó cùng với phần còn lại thay vì hành động chỉ dựa vào nó.
virtual_environment đến từ việc phát hiện trình giả lập. Trên web không có phán quyết
riêng cho "đang chạy dưới một hypervisor": những dấu hiệu mà trình duyệt nhìn thấy
được — một trình kết xuất phần mềm chung chung, số nhân thấp bất thường — xuất hiện
thường xuyên không kém trên các máy thông thường không có driver GPU và trong các phiên
desktop từ xa, nên chúng tôi không biến chúng thành một phán quyết mà bạn sẽ phải hoài
nghi.
| Năng lực | Khả dụng |
|---|---|
| Phát hiện tự động hóa, headless và tác tử AI | Mọi gói |
| Danh sách trắng trình thu thập dữ liệu đã xác minh | Mọi gói |
| Phát hiện trình giả lập | Mọi gói |
Chỉ dấu anti-detect (bot.antidetectScore, 0..100) | Từ Pro trở lên |
| Mã lý do, khối hành vi | Từ Business trở lên |
| Phát hiện DevTools | Từ Business trở lên |
Việc chấm điểm anti-detect vẫn đang được hiệu chỉnh.
bot.antidetectScoređược báo cáo để bạn có thể quan sát và tinh chỉnh chính sách của riêng mình — hãy xem nó như một đầu vào cho quyết định rủi ro, chứ không phải lý do độc lập để chặn.
Các kiểm tra chỉ dành cho di động không hiệu quả trên web. Việc phát hiện root, jailbreak, ứng dụng nhân bản/kép và Frida phụ thuộc vào tín hiệu native trên di động mà trình duyệt không thể thu thập. TRACIO chỉ cung cấp SDK cho trình duyệt, vì vậy hãy dựa vào các phán quyết về tự động hóa, headless, tác tử AI, anti-detect, trình giả lập và hành vi — những phán quyết hoạt động đầy đủ trên web.
Các bot tốt đã biết được nhận diện qua user-agent của chúng, sau đó được xác minh dựa trên IP đang kết nối — một truy vấn DNS ngược trên IP đó, một bước kiểm tra rằng tên máy chủ thu được thuộc về tên miền của nhà vận hành, và một truy vấn xuôi xác nhận nó phân giải trở lại đúng IP ban đầu. Đây chính là quy trình xác minh do chính các nhà vận hành trình thu thập dữ liệu công bố.
| Trình thu thập | Tên miền được xác minh |
|---|---|
.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 |
Trình thu thập dữ liệu đã xác minh cho ra human. Một yêu cầu tự nhận là Googlebot
trong khi IP của nó rõ ràng thuộc về bên khác sẽ bị phân loại là bot — còn việc truy
vấn chỉ đơn thuần không có kết quả hoặc hết thời gian chờ thì không được coi là bằng
chứng giả mạo.
Động lực học tương tác — chuyển động con trỏ, nhịp gõ phím, cuộn trang — tham gia vào
phán quyết như bằng chứng về việc có con người hiện diện hay không, chứ không phải
đó là người nào. Từ gói Business trở lên, kết quả tổng hợp được gửi trong khối
behavior của webhook:
{ "behavior": { "score": 87, "verdict": "human", "confidence": 0.92 }}score chạy trong khoảng 0..100 (càng cao càng giống người), verdict nhận giá trị
human, uncertain hoặc bot, còn confidence (0..1) cho biết phán quyết dựa trên
bao nhiêu bằng chứng — một lượt truy cập ngắn chỉ với hai chuyển động con trỏ sẽ có
điểm thấp ở đây ngay cả khi phán quyết trông có vẻ dứt khoát.
Khối này chỉ xuất hiện khi việc chấm điểm hành vi thực sự đã chạy cho lượt truy cập đó. Việc thiếu khối có nghĩa là "không có dữ liệu", không bao giờ có nghĩa là "không có gì đáng ngờ" — đừng đọc sự vắng mặt của nó như một tín hiệu sạch.
SDK máy khách cung cấp một giá trị boolean tiện dụng result.bot.detected, cùng với
confidence trên thang 0..100:
const result = await tracio.getResult()
if (result.bot.detected) { console.warn(`Bot detected (confidence ${result.bot.confidence})`) showCaptcha() return}
await login(credentials)Trên máy chủ của bạn, hãy hành động dựa trên lần gửi webhook. Phán
quyết về bot nằm trong đối tượng bot — bot.result và 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")})Giá trị bằng không và rỗng bị lược khỏi payload, vì vậy hãy đọc bot.type một cách
phòng thủ thay vì bắt buộc phải có nó trong lược đồ của bạn.
Bộ phát hiện bot của TRACIO được thiết kế để có tỷ lệ dương tính giả gần bằng không, nhưng vẫn tồn tại các trường hợp biên:
| Tình huống | Rủi ro | Biện pháp giảm thiểu |
|---|---|---|
Tiện ích mở rộng trình duyệt sửa đổi navigator | Thấp | Đối chiếu chéo qua nhiều kiểm tra ngăn việc một kiểm tra đơn lẻ kích hoạt |
| Phần mềm bảo mật doanh nghiệp | Rất thấp | Phân loại headless đòi hỏi bằng chứng củng cố |
| Công cụ trợ năng | Không có | API trợ năng không tham gia vào việc phát hiện bot |
| Người dùng VPN/proxy | Không có | Cờ mạng được theo dõi tách biệt với phán quyết về bot |
Nếu bạn gặp dương tính giả, hãy xem bot.type (và reasons từ gói Business trở lên)
để hiểu lớp quan sát nào đã kích hoạt, rồi điều chỉnh chính sách của bạn. Xem
Khắc phục sự cố để biết các nguyên nhân phổ biến.