bot.sannysoft.com và CreepJS thực sự kiểm tra gì, cách đọc một dòng kết quả, và vì sao vượt qua chúng không đồng nghĩa với vượt qua hệ thống phát hiện thật.
Tìm "tôi có phải là bot không" và hai cái tên liên tục xuất hiện: bot.sannysoft.com và CreepJS. Cả hai đều là trang miễn phí, không cần đăng ký, chạy một loạt phép kiểm tra phía máy khách và hiển thị thẳng kết quả thô — không điểm số ẩn, không cần giải thích thêm. Chúng được các kỹ sư QA kiểm thử pipeline CI headless ưa chuộng, và cũng được chính những tác giả công cụ tự động hóa mà bài kỹ thuật phát hiện bot của chúng tôi đề cập tới. Bài viết này giải thích mỗi trang thực sự kiểm tra gì, cách đọc một dòng kết quả, và — quan trọng hơn — vì sao một kết quả sạch trên một trong hai trang không đồng nghĩa với việc vượt qua một hệ thống phát hiện thật trong môi trường sản xuất.
Điểm chính
- bot.sannysoft.com chạy một bảng kiểm tra đạt/không đạt nhanh gọn cho các dấu hiệu tự động hóa kinh điển:
navigator.webdriver, đối tượngwindow.chrome, danh sách plugin và quyền, cùng chuỗi renderer WebGL. - CreepJS đi sâu hơn: đây là dự án mã nguồn mở đối chiếu cùng một thuộc tính trình duyệt qua nhiều đường dẫn mã độc lập, và gắn cờ "nói dối" khi một bản vá ẩn danh thay đổi một đường dẫn nhưng bỏ sót đường dẫn khác.
- Một dòng màu xanh chỉ có nghĩa là trình duyệt của bạn không vấp phải dấu hiệu cụ thể đó — nó không nói lên gì về phân tích hành vi, dấu vân tay TLS/HTTP-2, hay danh tiếng IP mà một trang thật cũng chấm điểm.
- Cả hai công cụ đều là dự án cộng đồng độc lập, không phải sản phẩm của bất kỳ nhà cung cấp trình duyệt nào, và bộ kiểm tra chính xác của chúng thay đổi khi các framework tự động hóa tiến hóa.
- Công cụ phát hiện bot của chính BrowserInsight hiển thị nhiều tín hiệu tương tự cho trình duyệt hiện tại của bạn, kèm giải thích ý nghĩa của từng tín hiệu.
Các trang kiểm tra công khai này thực sự kiểm tra gì
Không trang nào là sản phẩm thương mại — cả hai đều xuất phát từ cùng cộng đồng nghiên cứu được ghi lại trong bài phát hiện trình duyệt headless của chúng tôi, và cả hai tồn tại để cho bất kỳ ai câu trả lời nhanh, minh bạch cho câu hỏi "trình duyệt tự động của tôi đang rò rỉ những gì?"
bot.sannysoft.com là trang đơn giản hơn trong hai trang: tải trang lên, nó sẽ kết xuất một bảng mà mỗi dòng là một dấu hiệu tự động hóa đã biết, tô màu xanh (giống người) hoặc đỏ (giống tự động). Nó kiểm tra những thứ như navigator.webdriver có báo cáo true hay không, đối tượng window.chrome mà Chrome thật phơi bày có tồn tại hay không, navigator.plugins có độ dài khác không hợp lý hay không, API Permissions có trả về câu trả lời nhất quán nội bộ hay không, và chuỗi renderer WebGL có trỏ tới phần cứng GPU thật thay vì bộ rasterizer phần mềm hay không. Đây chính xác là những nhóm mà bài kỹ thuật phát hiện bot của chúng tôi đề cập sâu hơn — trang của Sannysoft chỉ là cách nhanh để thấy chúng áp dụng trên chính trình duyệt của bạn.
CreepJS (mã nguồn tại github.com/abrahamjuliot/creepjs) là một dự án mã nguồn mở lớn hơn nhiều, giấy phép MIT, được xây dựng đặc biệt để bắt việc giả mạo và công cụ ẩn danh, chứ không chỉ tự động hóa trần trụi chưa vá. Thay vì đọc một giá trị một lần, nó đọc cùng giá trị đó qua nhiều đường dẫn mã độc lập — chuỗi prototype, phạm vi cô lập của Web Worker, đối tượng toàn cục riêng của iframe — rồi so sánh chúng. Một trình duyệt thật, không bị sửa đổi sẽ cho cùng câu trả lời qua mọi đường dẫn. Nếu một bản vá ẩn danh ghi đè navigator.webdriver trên luồng chính nhưng quên làm điều tương tự bên trong worker, sẽ xuất hiện sự không khớp mà CreepJS gắn nhãn là "nói dối". Chính việc đối chiếu chéo đường dẫn này khiến CreepJS khó vượt qua hơn trang của Sannysoft đối với những ai cố tình giả mạo dấu vân tay, thay vì chỉ chạy tự động hóa chưa vá.
Đọc một dòng kết quả
Cả hai trang thể hiện cùng một ý tưởng cốt lõi — giá trị quan sát được so với giá trị kỳ vọng của một trình duyệt thật — nhưng trình bày khác nhau.
Trên bảng của Sannysoft, mỗi dòng đặt tên một phép kiểm tra và tô màu theo kết quả. Những dòng thực sự đáng đọc: WEBDRIVER (phải là false/vắng mặt trên trình duyệt thật), dòng CHROME (Chrome thật phơi bày một đối tượng window.chrome không tầm thường; nhiều ngữ cảnh tự động hóa thì không), PLUGINS-LENGTH (một bản cài Chrome desktop thật báo cáo một danh sách plugin nhỏ nhưng khác không), dòng PERMISSIONS (kiểm tra xem trạng thái quyền được truy vấn có nhất quán nội bộ hay mâu thuẫn), và các dòng vendor/renderer của WebGL (một renderer phần mềm như SwiftShader thay vì tên GPU thật là một trong những dấu hiệu đơn lẻ mạnh nhất, như được trình bày trong bài phát hiện trình duyệt headless của chúng tôi).
CreepJS hiển thị điểm tin cậy tổng hợp ở trên cùng, sau đó chia kết quả thành các danh mục với từng thuộc tính cụ thể được gắn cờ riêng lẻ là nhất quán hoặc bị phát hiện "nói dối". Một lời nói dối duy nhất được gắn cờ mang nhiều thông tin hơn điểm tổng hợp — nó cho bạn biết chính xác lớp giả mạo nào không che phủ được mọi đường dẫn mã, điều hữu ích nếu bạn đang gỡ lỗi cấu hình tự động hóa của chính mình thay vì chỉ nhìn vào tổng điểm.
Hãy xem cả hai trang là các dự án đang sống: tên dòng, danh mục và cách chấm điểm chính xác của chúng thay đổi khi người bảo trì thêm các phép kiểm tra cho những dấu hiệu mới phát hiện, vì vậy đây là lời giải thích về các nhóm tín hiệu nền tảng, chứ không phải sổ tay cố định cho một phiên bản cụ thể.
Tín hiệu nào quan trọng, tín hiệu nào chỉ là nhiễu
Không phải dòng nào cũng có trọng số như nhau:
| Tín hiệu | Trọng số | Vì sao |
|---|---|---|
navigator.webdriver === true | Mạnh | Trình duyệt thật không bao giờ báo cáo giá trị này; chỉ các phiên WebDriver chưa vá mới vậy |
| Renderer WebGL là bộ rasterizer phần mềm | Mạnh | Giả mạo điều này đòi hỏi quyền truy cập GPU thật, thứ mà hầu hết môi trường tự động hóa thiếu |
| "Lời nói dối" thuộc tính do CreepJS gắn cờ | Mạnh | Sự không nhất quán nội bộ mà một trình duyệt thật, không bị sửa đổi, về mặt cấu trúc không thể tạo ra |
| Danh sách plugin trống hoặc ngắn, xét riêng | Yếu | Trình duyệt chú trọng quyền riêng tư và các bản Chrome hiện đại cũng cố tình thu ngắn danh sách này |
| Thiếu API cũ (ví dụ Battery Status) | Yếu/nhiễu | Ngày càng bị loại bỏ hoặc hạn chế trong trình duyệt thật vì lý do quyền riêng tư, không liên quan đến tự động hóa |
Quy luật là: các tín hiệu đòi hỏi giả mạo điều gì đó mang tính cấu trúc về cách trình duyệt kết xuất hoặc phơi bày nội bộ của chính nó thì khó giả mạo và do đó có ý nghĩa. Các tín hiệu mà một trình duyệt bình thường, chú trọng quyền riêng tư cũng có thể kích hoạt thì yếu nếu xét riêng lẻ — đây chính xác là sự phân biệt giữa "một tín hiệu" và "tổ hợp tín hiệu được chấm điểm" mà bài kỹ thuật phát hiện bot của chúng tôi đưa ra.
Các trang kiểm tra này khác gì với hệ thống phát hiện thật của một trang web
Một lần tải trang trên Sannysoft hay CreepJS chỉ có thể đo những gì một trang tĩnh có thể quan sát: trình duyệt này, yêu cầu này, ngay bây giờ. Một hệ thống phát hiện trong môi trường sản xuất quan sát nhiều hơn thế rất nhiều — thời điểm chuột và bàn phím trong suốt phiên, dấu vân tay bắt tay TLS và HTTP/2 dưới tầng JavaScript, danh tiếng IP và tốc độ yêu cầu, cùng cách một dấu vân tay gom cụm so với hàng nghìn khách truy cập khác theo thời gian. Không điều nào trong số đó xuất hiện trên một bài kiểm tra một trang, vì chúng đòi hỏi lịch sử và khả năng quan sát tầng mạng mà một trang phía trình duyệt đơn giản không có.
Điều đó có nghĩa là kết quả sạch trên cả hai trang kiểm tra chứng minh cấu hình của bạn tránh được các dấu hiệu tĩnh nổi tiếng — thực sự hữu ích cho ai đang kiểm toán pipeline CI hoặc công cụ tự động hóa — nhưng đó không phải bằng chứng bạn sẽ vượt qua một hệ thống chống bot thương mại thực sự, vốn xếp chồng chính xác những tín hiệu mà một trang tĩnh không thể thấy. Nếu trình duyệt tự động của bạn còn cần một User-Agent hợp lý, bài viết về phát hiện giả mạo User-Agent của chúng tôi trình bày các phép kiểm tra ở tầng header và client hint chạy song song với mọi thứ ở trên.
Kiểm tra trình duyệt của chính bạn với BrowserInsight
Nếu bạn muốn thấy các tín hiệu này được giải thích cho trình duyệt hiện tại của mình thay vì đọc một bảng đạt/không đạt trần trụi, công cụ phát hiện bot của BrowserInsight báo cáo trạng thái navigator.webdriver, tính nhất quán của plugin và quyền, cùng renderer WebGL của bạn — mỗi mục kèm giải thích dễ hiểu, tất cả được tính toán phía máy khách.
Câu hỏi thường gặp
Sannysoft và CreepJS có phải công cụ chính thức của Google hay các nhà cung cấp trình duyệt không?
Không. Cả hai đều là dự án cộng đồng độc lập, không liên kết với bất kỳ nhà cung cấp trình duyệt nào. Chúng được sử dụng rộng rãi trong cộng đồng phát hiện bot và công cụ tự động hóa như các phép kiểm tra tham chiếu minh bạch, không chính thức — chứ không phải chứng nhận chính thức cho bất cứ điều gì.
Nếu tôi đạt điểm tin cậy cao trên CreepJS, liệu tôi có tránh được việc bị các trang web thật chặn không?
Không hẳn. Điểm tin cậy cao chỉ nghĩa là trình duyệt của bạn không vấp phải các phép kiểm tra cụ thể mà CreepJS chạy. Hệ thống chống bot của một trang web thật còn chấm điểm hành vi, dấu vân tay mạng, danh tiếng IP và lịch sử qua nhiều yêu cầu — không điều nào trong số đó một lần tải trang kiểm tra có thể đánh giá được.
Vì sao Sannysoft và CreepJS đôi khi bất đồng về cùng một trình duyệt?
Chúng kiểm tra những thứ khác nhau ở độ sâu khác nhau. Sannysoft tập trung vào một tập nhỏ các dấu hiệu kinh điển, nổi tiếng; CreepJS đối chiếu nhiều thuộc tính qua các đường dẫn mã độc lập, đặc biệt để bắt việc giả mạo đã vượt qua các phép kiểm tra đơn giản hơn. Cùng một cấu hình có thể trông sạch trên trang này nhưng bị gắn cờ trên trang kia.
Dùng các trang này để kiểm tra cấu hình tự động hóa của chính mình có hợp pháp không?
Có — đây là một trong những cách dùng phổ biến nhất của chúng. Các đội QA chạy trình duyệt headless trong CI, và các nhà nghiên cứu tìm hiểu kỹ thuật phát hiện, dùng những trang này để thấy chính xác điều mà tầng phát hiện của trang đích có thể nhận ra về cấu hình của họ trước khi nó lên môi trường sản xuất.


