Scarnox · Blog

Cloudflare Turnstile: วิธีทำงานและวิธีแก้ (เร็ว ๆ นี้)

Cloudflare Turnstile เป็น captcha ที่มักไม่ขอให้ผู้เข้าชมทำอะไรเลย มันทำการตรวจสอบในเบราว์เซอร์ และในกรณีส่วนใหญ่ผ่านโดยไม่มีปริศนา เมื่อไม่แน่ใจ มันอาจแสดงขั้นตอนโต้ตอบสั้น ๆ จากนั้น widget จะเขียน token ลงในฟอร์ม และเว็บจะตรวจสอบ token นั้นกับ Cloudflare การรองรับ Turnstile ของ Scarnox เร็ว ๆ นี้ คู่มือนี้อธิบายการทำงานของ widget ทำไมมักถูกสับสนกับการท้าทายอื่น และแนวทางทั่วไปสำหรับงานที่ถูกต้องตามกฎหมาย

widget ถูกฝังอย่างไร

หน้าเว็บมี element คอนเทนเนอร์ที่มี class cf-turnstile และ attribute data-sitekey script ของ Turnstile โหลด ทำการตรวจสอบ และเพิ่ม input ที่ซ่อนชื่อ cf-turnstile-response ค่าของ input นั้นคือ token ฟอร์มส่งมันพร้อมฟิลด์อื่น ๆ และ backend ของเว็บส่งไปยัง endpoint การยืนยันของ Cloudflare พร้อม secret key ของเว็บ

เช่นเดียวกับ token widget อื่น ๆ การยืนยันเกิดขึ้นบนเซิร์ฟเวอร์ ฟอร์มที่ยอมรับค่าใดก็ได้ในฟิลด์นั้นโดยไม่ตรวจสอบ ไม่ได้รับการป้องกันจริง

โหมดและความหมายสำหรับสคริปต์

Turnstile ทำงานได้มากกว่าหนึ่งโหมด ในโหมด managed Cloudflare ตัดสินว่าจะแสดงขั้นตอนโต้ตอบหรือไม่ ในโหมด non-interactive widget จะไม่ขอสิ่งใดจากผู้เข้าชมเลยและแสดงเพียงสถานะ ในโหมด invisible จะไม่แสดงอะไรเลย สำหรับสคริปต์ โหมดเปลี่ยนสิ่งที่คุณเห็นบนหน้า แต่ผลลัพธ์เหมือนกัน: token ในฟิลด์ฟอร์ม ที่ถูกตรวจสอบบนเซิร์ฟเวอร์

token มีอายุสั้นและใช้ได้ครั้งเดียว submit ฟอร์มไม่นานหลังจาก widget สร้าง token และอย่าใช้ token ที่ถูกยืนยันไปแล้วซ้ำ

ทำไมมันบล็อก automation

Turnstile ดูสัญญาณจากสภาพแวดล้อมของเบราว์เซอร์และพฤติกรรมของ session เบราว์เซอร์ headless ที่ตั้งค่าเริ่มต้น ฟีเจอร์ของเบราว์เซอร์ที่หายไปหรือไม่สอดคล้องกัน session ใหม่ที่ไม่มีประวัติ และ address ของเครือข่ายที่น่าสงสัย ล้วนอาจผลักการตัดสินใจไปสู่การท้าทายหรือการบล็อกได้ สัญญาณเหล่านี้อยู่ในตระกูลเดียวกับที่ใช้โดยการตรวจสอบแบบให้คะแนนอื่น ๆ จึงเป็นเหตุผลที่แนวทางคล้ายกัน

แนวทางที่ถูกต้องตามหลัก

แนวทางเหล่านี้ใช้ได้ผลสำหรับงานที่ถูกต้อง

  1. ใช้เบราว์เซอร์จริงสำหรับหน้าที่โหลด Turnstile โปรไฟล์เบราว์เซอร์ปกติที่มีการตั้งค่าสม่ำเสมอมีโอกาสถูกท้าทายน้อยกว่า build ของ automation ที่เปลือย คู่มือการตรวจจับ headless browser ระบุสัญญาณที่พบบ่อย
  2. อยู่ใน session เดิม เก็บ cookie ข้ามหน้าของโฟลว์ของคุณ เพื่อไม่ให้ผู้เข้าชมดูเหมือนคนใหม่ในทุกคำขอ
  3. ควบคุมอัตราคำขอ อัตราที่สม่ำเสมอและเหมือนมนุษย์ลดการท้าทายได้มากกว่าเคล็ดลับใดเคล็ดลับหนึ่ง
  4. อ่านกฎของเว็บที่ Cloudflare คุ้มครองก่อน เว็บที่ได้รับการป้องกันหลายแห่งเผยแพร่ API หรือ feed ตรวจสอบสิ่งนั้นก่อนสร้างเวิร์กโฟลว์ผ่านเบราว์เซอร์ คู่มือการ scraping เว็บที่ Cloudflare คุ้มครอง ครอบคลุมแนวทางนี้อย่างลึกกว่า
  5. ใช้ test key ระหว่างพัฒนา Cloudflare เผยแพร่ site key สำหรับการพัฒนาที่ให้ผลลัพธ์ที่คาดเดาได้โดยไม่มีการตรวจสอบจริง ใช้สำหรับการทดสอบ integration ของคุณเอง ไม่ใช่ทราฟฟิกจริงระดับโปรดักชัน
  6. ถามเจ้าของ หากคุณดูแลเว็บ คุณปรับการตั้งค่า Turnstile ให้กับเส้นทางที่การทดสอบอัตโนมัติของคุณใช้ได้ หากไม่ใช่ ให้ขอ allowlist หรือ API

สิ่งที่ solver ของ Turnstile จะทำ

token-based Turnstile solver รับ sitekey และ URL ของหน้า สร้าง token ที่ถูกต้องสำหรับฟิลด์ cf-turnstile-response และส่งกลับให้โค้ดของคุณ โค้ดของคุณเขียน token ลงในฟอร์มและ submit ทันที นี่คือรูปแบบเดียวกับการเชื่อมต่อ PopularCaptcha แบบสด แต่ใช้ประเภทงานต่างกัน

Scarnox ยังไม่แก้ Turnstile แบบสดในตอนนี้ ประเภทงานที่ใช้งานได้แบบสดในวันนี้มีเพียง PopularCaptcha แบบ proxyless Turnstile เร็ว ๆ นี้ และรายละเอียดคำขอจะอยู่ในเอกสาร API เมื่อเปิดใช้งาน อย่าสร้างโดยอาศัยอินเทอร์เฟซที่สมมติขึ้นก่อนหน้านั้น

ความผิดพลาดที่พบบ่อย

การเชื่อมต่อ Turnstile มักล้มเหลวในรูปแบบที่คาดเดาได้ไม่กี่แบบ ที่พบบ่อยที่สุดคือการใช้ token หลังจากหมดอายุหรือหลังจากถูกยืนยันไปแล้ว token ใช้ได้ครั้งเดียว ดังนั้นการลองใหม่หลังการ submit ฟอร์มที่ล้มเหลวต้องการผลลัพธ์จาก widget ใหม่ ไม่ใช่ค่าเดิม ประการที่สองคือ sitekey ที่เป็นของสภาพแวดล้อมอื่น key สำหรับการพัฒนาบนหน้า production หรือกลับกัน จะให้การยืนยันล้มเหลวที่ดูเหมือนบั๊กในโค้ดของคุณ ตรวจสอบว่าหน้านั้นใช้ key ตัวใดก่อนดีบักสิ่งอื่น

ความผิดพลาดที่พบได้บ่อยอีกอย่างคือการถือขั้นตอนโต้ตอบเป็นความล้มเหลว ในโหมด managed Turnstile อาจแสดงขั้นตอนสั้น ๆ ให้ผู้เข้าชมบางคน และสคริปต์ที่คาดหวังการผ่านแบบเงียบจะค้างที่ตรงนั้น สร้างโฟลว์ให้รอผลลัพธ์ของ widget และจัดการกรณีที่ widget ขอข้อมูลเพิ่มเติม

สุดท้าย อย่าฮาร์ดโค้ดชื่อฟิลด์โดยไม่ตรวจสอบในหน้าจริง input cf-turnstile-response เป็นมาตรฐาน แต่เว็บอาจห่อ widget ต่างออกไป และการอ่านฟอร์มที่แสดงผลเร็วกว่าการเดา

การ scrape อย่างรับผิดชอบ

การ scrape เว็บที่ได้รับการป้องกันด้วย Turnstile เป็นงานที่พบบ่อย และต้องการความระมัดระวังเหมือนการ scraping อื่น ๆ ตรวจสอบ robots.txt และข้อกำหนดการใช้งาน ควบคุมอัตราให้ต่ำ และอย่าเก็บข้อมูลส่วนบุคคลที่ไม่จำเป็น หากเว็บมี API ให้เลือกใช้ API คู่มือการ scrape เว็บถูกกฎหมายหรือไม่ ครอบคลุมประเด็นหลัก

การเตรียมตัว

สร้างบัญชี เพื่อเริ่มด้วยเครดิตทดลองใช้ฟรี ไม่ต้องใช้บัตร เมื่อการรองรับ Turnstile เปิดใช้งาน คุณจะทดสอบกับหน้าของคุณเองได้ก่อนรันอะไรกับเว็บจริง

ขั้นตอนถัดไป