Tiện ích hiếm khi bị gắn cờ chỉ vì được cài. Vấn đề là nó đổi những gì trang đo được, khiến trình duyệt tự mâu thuẫn với chính nó.
Có, nhưng không phải vì lý do mà nhiều người nghĩ. Một tiện ích gần như không bao giờ bị gắn cờ chỉ vì đã được cài. Bạn bị gắn cờ khi nó thay đổi những gì trang có thể đo, khiến trình duyệt không còn nhất quán nội bộ: User-Agent nói một đằng, nền tảng nói một nẻo, và một thuộc tính lẽ ra là gốc (native) lại hóa ra là một hàm JavaScript.
Bộ phát hiện đọc sự mâu thuẫn đó là "có thứ gì đang can thiệp vào trình duyệt này", mà nhìn từ bên ngoài, can thiệp chính là dấu hiệu điển hình của tự động hóa. Bài này đi qua từng nhóm tiện ích gây ra điều đó, mỗi nhóm phá tín hiệu nào, và vì sao bộ phát hiện chấm điểm như vậy.
Điểm chính
- Sự mất nhất quán mới kích hoạt cờ, chứ không phải bản thân tiện ích. Trang so sánh những giá trị lẽ ra phải khớp nhau (User-Agent với nền tảng, cửa sổ chính với iframe, getter với mã gốc). Tiện ích sửa một phía là tạo ra chỗ lệch.
- Sáu nhóm gây phần lớn vấn đề: công cụ đổi user-agent, công cụ chống lấy dấu vân tay hoặc thêm nhiễu canvas, tiện ích định nghĩa lại thuộc tính
navigator, tiện ích quản lý proxy/VPN, trợ thủ tự động hóa bị bỏ quên, và công cụ dành cho nhà phát triển. navigator.webdriverkhông phải tín hiệu của tiện ích. Framework tự động hóa đặt nó; tiện ích thông thường thì không. Đổ lỗi cho nó khi bị gắn cờ nhầm sẽ khiến bạn tìm sai chỗ.- Bộ phát hiện chấm điểm theo tổ hợp. Một tín hiệu lạ hiếm khi chặn ai, nhưng hai ba tín hiệu cộng lại có thể vượt ngưỡng của một trang.
- Cách xử lý là chẩn đoán: tìm ra tiện ích nào phá sự nhất quán và tắt nó trên trang bị ảnh hưởng.
Tiện ích trở thành tín hiệu bot như thế nào
Một đoạn mã phát hiện bot không hỏi bạn đang chạy tiện ích nào. Nếu muốn tìm hiểu cơ chế đó, bài rủi ro quyền riêng tư từ tiện ích mở rộng giải thích cách trang phát hiện tiện ích đã cài. Bài này bắt đầu muộn hơn một bước: tiện ích đã ở đó, và nó đã thay đổi thứ gì đó mà trang quan sát được.
Phần lớn giá trị bị đổi đến từ hai nơi. Một là content script thay đổi bức tranh về trình duyệt mà trang thấy, chẳng hạn ghi đè một thuộc tính trong ngữ cảnh trang, như tài liệu content script của Chrome mô tả. Hai là tiện ích thay đổi tầng mạng, kéo theo header hoặc IP hiển thị. Dù theo cách nào, trang cũng có trong tay hai nguồn lẽ ra phải khớp mà lại không khớp.
Sáu nhóm tiện ích
1. Công cụ đổi user-agent và nền tảng
Chúng thay chuỗi User-Agent, thường để xem một trang như thể bằng trình duyệt hay thiết bị khác. Chuỗi thay đổi, nhưng phần còn lại của trình duyệt thì không đi theo. navigator.platform, các header Client Hints, hành vi của engine kết xuất và đối tượng navigator bên trong iframe vẫn có thể báo trình duyệt thật.
Chuỗi Chrome trên Windows đi kèm giá trị nền tảng Linux và bộ tính năng chỉ Firefox mới có chính là mâu thuẫn mà bộ phát hiện tìm kiếm. Cơ chế được trình bày trong vì sao giả mạo user-agent phản tác dụng và cách trang phát hiện giả mạo user-agent.
2. Tiện ích chống lấy dấu vân tay và thêm nhiễu canvas
Công cụ ngẫu nhiên hóa đầu ra canvas hoặc âm thanh nhằm ngăn việc lấy dấu vân tay. Vướng mắc là một thiết bị ổn định trả về cùng một kết quả canvas mỗi lần. Nếu hai lần đọc cùng một hình vẽ cho ra pixel khác nhau, chính sự ngẫu nhiên là dấu hiệu lộ. Các triển khai cẩn thận tránh được điều này; các triển khai sơ sài thì không. Sự đánh đổi nằm trong bài nhiễu dấu vân tay canvas.
3. Tiện ích định nghĩa lại thuộc tính navigator
Một số tiện ích ghi đè navigator.userAgent, navigator.languages và các giá trị tương tự bằng cách định nghĩa một getter thay thế bằng JavaScript. Getter gốc khi truyền vào Function.prototype.toString sẽ in ra function get userAgent() { [native code] }. Bản thay thế viết bằng JavaScript lại in ra mã nguồn của chính nó.
Trang cũng có thể kiểm tra thuộc tính bằng Object.getOwnPropertyDescriptor và thấy getter nằm ở nơi bình thường không có. Kiểu "bắt nói dối" này chính là cách CreepJS đối chiếu giá trị đáng tin và không đáng tin.
4. Tiện ích quản lý proxy và VPN
Tiện ích quản lý proxy đổi IP đầu ra của bạn nhưng không đổi múi giờ hệ thống, danh sách ngôn ngữ hay locale. IP nói một quốc gia, trình duyệt nói quốc gia khác. Sự lệch này là đầu vào rủi ro tiêu chuẩn, và nó cũng kích hoạt với những người không làm gì sai. Xem lệch múi giờ so với IP và vì sao phát hiện VPN cho kết quả dương tính giả.
5. Trợ thủ tự động hóa bị bỏ quên
Công cụ giải CAPTCHA, trình ghi macro, tự điền biểu mẫu và trình quản lý userscript tác động lên trang theo cách con người không làm: điền trường tức thì, tạo sự kiện tổng hợp, nhấp chuột mà trước đó không có di chuyển chuột. Trình quản lý userscript chỉ là công cụ chạy script của chính bạn trên các trang đã chọn, như API userScripts của Chrome mô tả. Bản thân công cụ trung tính, nhưng những gì nó làm với thời gian và sự kiện nhập liệu chính là thứ bộ phát hiện hành vi đo.
6. Công cụ nhà phát triển và giả lập
Mở DevTools và giả lập thiết bị làm thay đổi kích thước cửa sổ, hỗ trợ cảm ứng và thời gian của một số lệnh gọi. Một trình duyệt máy tính tự xưng là điện thoại nhưng có chuột và không có điểm chạm trông thiếu nhất quán. Lỗi này dễ vô tình gây ra và cũng dễ sửa: hãy đóng DevTools.
Trình chặn quảng cáo là một trường hợp riêng, vì nó can thiệp vào phần tử mồi chứ không phải thuộc tính trình duyệt. Chủ đề này có bài viết riêng.
Còn navigator.webdriver thì sao?
navigator.webdriver là true khi trình duyệt bị framework tự động hóa điều khiển. Tiện ích thông thường không đặt nó. Nếu bạn bị gắn cờ mà webdriver đọc ra false, nguyên nhân là một trong các vấn đề nhất quán ở trên chứ không phải cờ này. Chiều ngược lại cũng đúng: một trình duyệt tự động với danh sách tiện ích sạch vẫn báo true.
Vì sao người dùng bình thường cũng bị vạ lây
Tiện ích về quyền riêng tư và hỗ trợ tiếp cận là chính đáng, và bộ phát hiện biết điều đó. Vì thế chúng chấm điểm theo tổ hợp thay vì từng tín hiệu riêng lẻ. Kỹ thuật phát hiện bot giải thích cách nhiều tín hiệu yếu gộp thành một phán quyết, còn cách web gắn cờ trình duyệt của bạn đi qua cùng cách chấm điểm đó từ phía người truy cập.
Trường hợp xui nhất là khi chúng chồng lên nhau: công cụ đổi user-agent cộng công cụ nhiễu canvas cộng tiện ích proxy. Riêng từng cái đều có thể bào chữa. Gộp lại, chúng cho trang ba lý do riêng để không tin trình duyệt.
Tìm ra tiện ích nào là thủ phạm
Bạn không cần đoán mò. Công cụ phát hiện bot của chúng tôi chạy các kiểm tra hoàn toàn trong trình duyệt của bạn và cho thấy những dòng nào bị kích hoạt. Nó không phát hiện hay liệt kê tiện ích bạn đã cài. Nó phát hiện tác động của chúng: getter navigator bị can thiệp, iframe có User-Agent khác cửa sổ chính, đầu ra canvas bị ngẫu nhiên hóa, nền tảng lệch so với nhân trình duyệt, webdriver, cùng DevTools hoặc giả lập.
- Chạy kiểm tra khi bật tất cả tiện ích và ghi lại các dòng bị gắn cờ.
- Mở một hồ sơ sạch không có tiện ích nào và chạy lại.
- So sánh. Dòng nào chuyển từ bị gắn cờ sang đạt chỉ ra nhóm cần điều tra.
- Bật lại từng tiện ích một cho đến khi dòng đó quay lại.
Nếu một trang cụ thể đang chặn bạn, hãy tắt tiện ích gây lỗi cho riêng trang đó thay vì gỡ nó ở mọi nơi. Đây là quy trình chẩn đoán, không phải cách để che giấu điều gì: nếu một tiện ích thay đổi những gì trình duyệt báo cáo, để trình duyệt báo cáo nhất quán trở lại mới là kết quả trung thực.
Câu hỏi thường gặp
Chỉ cài tiện ích có bị gắn cờ không?
Không. Sự hiện diện không phải tín hiệu. Cờ đến từ sự thiếu nhất quán đo được mà tiện ích gây ra, hoặc từ hành vi như điền biểu mẫu tức thì.
Tiện ích quyền riêng tư có khiến tôi giống bot hơn không?
Có thể. Ghi đè giá trị hoặc ngẫu nhiên hóa đầu ra tạo ra những chỗ lệch mà trình duyệt thông thường không có, và một cấu hình hiếm cũng dễ bị nhận diện hơn.
Tiện ích có đặt navigator.webdriver không?
Không. Framework tự động hóa đặt nó. Tiện ích thông thường để nguyên false.
Làm sao biết tiện ích nào gây vấn đề?
Chạy cùng một kiểm tra khi bật tiện ích và trong hồ sơ sạch, rồi bật lại từng tiện ích một trong khi theo dõi dòng nào thay đổi.


