Script chạy trên máy nhà mượt đến mức khó tin. Đẩy cùng một đoạn code đó lên VPS, trang web bắt đầu trả captcha, trả 403, hoặc im lặng không trả gì cả. Code không đổi, logic không đổi, thứ duy nhất thay đổi là môi trường chạy. Và chính môi trường đó là thứ bị soi.
Bài này đi qua các tầng tín hiệu website dùng để nhận ra automation, kèm cách tự kiểm tra bằng website công khai, không cần viết một dòng code nào.
Automation bị phát hiện qua mấy tầng
Tầng HTTP
Thư viện HTTP và trình duyệt gửi đi là hai thứ khác nhau, khác ngay từ gói tin đầu tiên. Thứ tự header, header báo cáo phiên bản browser, ngôn ngữ, user-agent đều lộ hết. Nghiêm trọng hơn là dấu vết bắt tay TLS (còn gọi là JA3): mỗi client có một bản tay riêng, bản tay của thư viện lập trình khác hẳn Chrome, server đọc một lần là biết bên kia đang gọi API bằng tool chứ không phải browser thật.
Tầng JavaScript
Khi script chạy trong browser tự động, các biến JavaScript không giấu hết được. Có một cờ chuyên dụng báo “tôi đang bị điều khiển tự động” khi dùng Selenium. Ngoài ra còn nhiều dấu vết khác: thiếu các object chỉ browser thật mới có, danh sách plugin rỗng trên browser không giao diện, số nhân CPU, kích thước màn hình lệch so với cửa sổ hiển thị.
Tầng đồ họa
Canvas và WebGL là hai kênh fingerprint lâu đời và đến giờ vẫn dùng nhiều, vì phụ thuộc phần cứng và driver. Cơ chế đơn giản là vậy: cùng một dòng vẽ, hai máy render ra lệch nhau vài pixel, hash lại thành mã nhận diện; card màn hình thì cho ra tên nhà sản xuất và dòng GPU, hai máy khác nhau hầu như không bao giờ trùng. Đây cũng là lý do fingerprint giữ được độ ổn định vượt trội so với cookie.
Tầng môi trường
Timezone của VPS là UTC, đăng nhập bằng tài khoản Việt Nam, trong khi IP lại ở Singapore. Bảng font cũng nói lên hệ điều hành: Windows có bộ font riêng, macOS có bộ khác, Linux container hầu như trả rỗng. Những cặp dữ liệu không khớp nhau này nhiều khi nói nhiều hơn chính các chỉ số riêng lẻ.
Tầng hành vi
Chuột đi thẳng tắp, click đúng giữa nút mỗi lần, khoảng cách giữa các request giống hệt nhau. Phân phối thời gian của người thật có nhiễu, script thì không.
Tự kiểm tra bằng website công khai
Không cần biết code, mấy trang này cho xem browser của bạn “trông” thế nào trước mắt server:
-
browserleaks : xem chi tiết canvas, WebGL, font, timezone, IP, từng chỉ số một.
-
amiunique : nói fingerprint của bạn hiện tại có độ hiếm bao nhiêu, qua bao nhiêu lượt truy cập.
-
Cách kiểm tra hay dùng: mở trang đó trên browser thường và trên automation tool, đối chiếu hai kết quả, chỗ nào lệch là chỗ đó đáng chú ý.
Vì sao xoay proxy không cứu được
Bài proxy residential vs datacenter vài hôm trước ở đây nói đúng một nửa vấn đề. Xoay IP là cần, nhưng nếu client vẫn là thư viện HTTP thì bản tay TLS và header vẫn lộ, mà IP đổi còn timezone, locale, GPU giữ nguyên thì càng mâu thuẫn thêm. Bên kia hợp nhất các tầng tín hiệu thành một điểm tin cậy, một điểm mâu thuẫn đủ lớn là đánh dấu cả phiên.
Giảm thiểu theo hướng hợp lý
Nếu mục tiêu là chạy automation ổn định cho QA, kiểm thử hoặc side project thì hướng đi hợp lý là giảm mâu thuẫn, không phải nuôi thêm một loại công cụ:
-
Dùng browser engine thật, ví dụ Playwright, thay vì thư viện HTTP khi trang cần JS.
-
Mỗi môi trường chỉ phục vụ một mục đích: riêng dev, riêng test, riêng sản xuất; IP, timezone, locale nhất quán trong cùng một môi trường.
-
Khi cần nhiều môi trường song song, cách tôi làm là dùng profile riêng cho từng luồng việc. Ví dụ khi test flow đăng nhập nhiều tài khoản, các profile trong BitBrowser mỗi cái là một môi trường sạch, cookie, session, fingerprint cách biệt, đổi giữa các profile không phải đăng xuất đăng nhập lại. Bản miễn phí cho 10 profile, đủ để thử; chi tiết thì mọi người xem trực tiếp trên site của họ.
Nhắc lại cho rõ: đây là góc nhìn kỹ thuật để viết automation bền hơn, không phải hướng dẫn đi vòng qua điều khoản của ai. Scrape hay tự động hóa trên dịch vụ nào thì vẫn tuân theo ToS của dịch vụ đó.
Mọi người còn cách nhận biết automation nào khác không, hoặc đã gặp trang nào chặn theo cách lạ? Chia sẻ để cùng học.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?