Cloudflare Turnstile: cách hoạt động và cách giải (sắp ra mắt)
Cloudflare Turnstile là một captcha thường không yêu cầu gì ở người truy cập. Nó chạy các kiểm tra trong trình duyệt, và trong hầu hết trường hợp nó qua mà không có câu đố nào. Khi không chắc chắn, nó có thể hiển thị một bước tương tác ngắn. Widget khi đó ghi một token vào form, và website xác minh token đó với Cloudflare. Hỗ trợ Turnstile trên Scarnox sắp ra mắt. Hướng dẫn này giải thích cách widget hoạt động, vì sao nó thường bị nhầm với các thử thách khác, và các hướng tiếp cận chung cho công việc hợp pháp.
Cách widget được nhúng
Trang bao gồm một phần tử container có class cf-turnstile và thuộc tính data-sitekey. Script Turnstile tải, chạy các kiểm tra, và thêm một input ẩn tên cf-turnstile-response. Giá trị của input đó là token. Form gửi nó cùng các trường còn lại, và backend của website gửi nó đến endpoint xác minh của Cloudflare cùng với secret key của website.
Giống các widget token khác, việc xác minh diễn ra ở phía máy chủ. Một form chấp nhận bất kỳ giá trị nào trong trường đó mà không kiểm tra thì thực ra không được bảo vệ.
Các chế độ và ý nghĩa với script
Turnstile có thể chạy ở nhiều chế độ. Ở chế độ managed, Cloudflare quyết định có hiển thị bước tương tác hay không. Ở chế độ non-interactive, widget không bao giờ yêu cầu gì từ người truy cập và chỉ hiển thị trạng thái. Ở chế độ invisible, không hiển thị gì cả. Với một script, chế độ thay đổi những gì bạn thấy trên trang, nhưng kết quả vẫn như nhau: một token trong trường form, được xác minh ở phía máy chủ.
Token có thời hạn ngắn và chỉ dùng một lần. Hãy submit form ngay sau khi widget tạo ra token, và đừng dùng lại một token đã được xác minh.
Vì sao nó chặn tự động hóa
Turnstile xem xét các tín hiệu từ môi trường trình duyệt và hành vi của phiên. Trình duyệt headless mặc định, tập hợp tính năng trình duyệt bị thiếu hoặc không nhất quán, một phiên mới chưa có lịch sử, và một địa chỉ mạng đáng ngờ đều có thể đẩy quyết định về phía thử thách hoặc chặn. Các tín hiệu này cùng họ với những tín hiệu được dùng trong các kiểm tra dựa trên điểm số khác, đó là lý do các cách tiếp cận khá giống nhau.
Các hướng tiếp cận hợp pháp
Đây là các cách tiếp cận hiệu quả cho công việc hợp pháp:
- Dùng trình duyệt thật cho các trang có tải Turnstile. Một hồ sơ trình duyệt bình thường với cài đặt nhất quán ít bị thử thách hơn một bản build tự động hóa trần trụi. Hướng dẫn phát hiện trình duyệt headless liệt kê các tín hiệu thường gặp.
- Giữ phiên. Giữ cookie qua các trang trong luồng công việc của bạn, để khách truy cập không trông như mới tinh ở mỗi yêu cầu.
- Điều tiết yêu cầu. Một nhịp độ đều đặn, giống người thật giảm thử thách nhiều hơn bất kỳ mẹo đơn lẻ nào.
- Đọc quy định của website được Cloudflare bảo vệ trước. Nhiều website được bảo vệ công bố API hoặc feed. Hãy kiểm tra điều đó trước khi xây dựng một luồng trình duyệt. Hướng dẫn scraping website được Cloudflare bảo vệ trình bày cách tiếp cận chi tiết hơn.
- Dùng khóa thử nghiệm khi phát triển. Cloudflare công bố khóa sitekey thử nghiệm cho việc phát triển, cho kết quả có thể dự đoán mà không có kiểm tra thật. Chúng dành cho kiểm thử tích hợp của bạn, không dành cho lưu lượng production.
- Hỏi chủ website. Nếu bạn vận hành website, bạn có thể điều chỉnh cài đặt Turnstile cho các đường dẫn mà bài kiểm thử tự động của bạn dùng. Nếu không, hãy xin danh sách cho phép hoặc một API.
Bộ giải Turnstile sẽ làm gì
Một bộ giải Turnstile dựa trên token nhận sitekey và URL trang, tạo ra một token hợp lệ cho trường cf-turnstile-response, và trả về cho mã của bạn. Mã của bạn ghi token vào form và submit ngay. Đây là mẫu tương tự tích hợp PopularCaptcha đang chạy, chỉ khác loại tác vụ.
Hiện tại Scarnox chưa giải Turnstile trực tiếp. Loại tác vụ duy nhất đang chạy là PopularCaptcha, proxyless. Turnstile sắp ra mắt, và chi tiết yêu cầu sẽ có trong tài liệu API khi nó được phát hành. Đừng xây dựng dựa trên một giao diện giả định trước thời điểm đó.
Các lỗi thường gặp
Tích hợp Turnstile thường thất bại theo vài cách có thể đoán trước. Lỗi phổ biến nhất là dùng một token sau khi nó đã hết hạn hoặc sau khi nó đã được xác minh. Token chỉ dùng một lần, nên việc thử lại sau khi gửi form thất bại cần một kết quả widget mới, không phải giá trị cũ. Lỗi thứ hai là dùng một sitekey thuộc môi trường khác. Khóa phát triển trên trang production, hoặc ngược lại, sẽ tạo ra lỗi xác minh trông như lỗi trong code của bạn. Hãy kiểm tra trang đang dùng khóa nào trước khi debug bất cứ thứ gì khác.
Một lỗi thường gặp khác là coi một bước tương tác là thất bại. Ở chế độ managed, Turnstile có thể hiển thị một bước ngắn cho một số khách truy cập, và một script mong đợi kết quả im lặng sẽ bị kẹt ở đó. Hãy xây dựng luồng để chờ kết quả của widget, và xử lý trường hợp widget yêu cầu thêm.
Cuối cùng, đừng hard-code tên trường mà không kiểm tra trên trang đang chạy. cf-turnstile-response là chuẩn, nhưng một website có thể bọc widget khác đi, và đọc form đã được render nhanh hơn là đoán.
Thu thập dữ liệu có trách nhiệm
Scraping một website được Turnstile bảo vệ là một công việc phổ biến, và nó cần sự cẩn trọng như mọi công việc scraping khác. Kiểm tra robots.txt và điều khoản sử dụng. Giữ tốc độ thấp, và đừng thu thập dữ liệu cá nhân mà bạn không cần. Khi website có API, hãy ưu tiên API. Hướng dẫn web scraping có hợp pháp không trình bày các câu hỏi chính.
Chuẩn bị
Tạo tài khoản để bắt đầu với tín dụng dùng thử miễn phí, không cần thẻ. Khi hỗ trợ Turnstile ra mắt, bạn sẽ có thể thử nó trên các trang của chính mình trước khi chạy bất cứ thứ gì trên một website đang hoạt động.