มี CAPTCHA – แต่ไม่ได้ป้องกันอะไร
การเห็นวิดเจ็ต reCAPTCHA, hCaptcha หรือ Turnstile ไม่ได้บอกมากนักว่าแบบฟอร์มมีการป้องกันหรือไม่ ต่อไปนี้คือการตั้งค่าผิดที่พบบ่อยและวิธีตรวจแบบฟอร์มของตนเองภายในไม่กี่นาที
เจ้าของเว็บไซต์จำนวนมากเพิ่ม CAPTCHA ในแบบฟอร์มติดต่อ เห็นป้ายเล็ก ๆ หรือช่องทำเครื่องหมายปรากฏ แล้วคิดว่าปัญหาสแปมจบแล้ว แต่ข้อความขยะยังเข้ามา บ่อยครั้งตัว CAPTCHA ไม่ได้มีปัญหา เพียงแต่ไม่ได้เชื่อมต่อกับสิ่งใดที่หยุดบอตได้ บทความนี้อธิบายกรณีทั่วไปที่ทำให้ reCAPTCHA, hCaptcha และ Cloudflare Turnstile กลายเป็นของตกแต่ง และวิธีตรวจแบบฟอร์มของตนเอง
การป้องกันเกิดขึ้นจริงที่ไหน
บริการทั้งสามทำงานด้วยหลักการเดียวกัน สคริปต์ในเบราว์เซอร์ตรวจสอบแล้วส่งโทเค็นให้แบบฟอร์ม ซึ่งเป็นข้อความสั้น ๆ ที่บอกว่า “ผู้เยี่ยมชมนี้ผ่านแล้ว” โทเค็นเดินทางไปยังเซิร์ฟเวอร์พร้อมข้อมูลแบบฟอร์ม การตัดสินใจจริงเกิดขึ้นที่นั่นเท่านั้น: เซิร์ฟเวอร์ส่งโทเค็นพร้อมคีย์ลับให้ผู้ให้บริการและได้รับคำตอบกลับว่าสำเร็จหรือล้มเหลว และสำหรับ reCAPTCHA v3 จะมีคะแนนด้วย หากขาดข้อใดในห่วงโซ่นี้ วิดเจ็ตยังดูปกติดี แต่บอตที่ส่งตรงไปยังตัวประมวลผลแบบฟอร์มจะผ่านได้ทันที
คีย์ทดสอบที่ปล่อยทุกอย่างผ่าน
Google, hCaptcha และ Cloudflare เผยแพร่คีย์ทดสอบพิเศษเพื่อให้นักพัฒนารันการทดสอบอัตโนมัติโดยไม่ต้องแก้ปริศนา เมื่อใช้คีย์ลับทดสอบที่ตรงกัน การตรวจสอบจะสำเร็จเสมอ ซึ่งเป็นวัตถุประสงค์ทั้งหมดของคีย์เหล่านี้ คีย์มีไว้สำหรับสภาพแวดล้อมในเครื่องและสเตจจิง แต่กลับหลุดมาถึงระบบใช้งานจริงอยู่เสมอ: นักพัฒนาวางคีย์ไว้ตอนสร้าง เว็บไซต์เปิดใช้งาน แล้วไม่มีใครเปลี่ยนออก อย่างน้อย reCAPTCHA ยังมีข้อความในวิดเจ็ตว่าทดสอบเท่านั้น แต่การตั้งค่าแบบมองไม่เห็นแทบไม่มีใครดู หากทั้งคีย์เว็บไซต์ทดสอบและคีย์ลับทดสอบอยู่บนระบบจริง ทุกการส่งจะผ่านไม่ว่าจะมาจากคนหรือบอต แต่หากมีเพียงคีย์เว็บไซต์ที่เป็นคีย์ทดสอบ การตรวจสอบจะล้มเหลวแทนและข้อความจริงอาจถูกปฏิเสธ
โทเค็นที่ไม่มีใครตรวจสอบ
กรณีคลาสสิกที่สองคือเซิร์ฟเวอร์ไม่เคยถามผู้ให้บริการ วิดเจ็ตทำงาน มีการสร้างและส่งโทเค็น แต่ตัวประมวลผลแบบฟอร์มเพิกเฉยต่อโทเค็น ที่มาที่พบบ่อยคือแบบฟอร์มเขียนเอง โค้ดตัวอย่างที่คัดลอกมาครอบคลุมเฉพาะฝั่งเบราว์เซอร์ และการตั้งค่าปลั๊กอินที่ยังไม่เสร็จ กรณีใกล้เคียงคือเซิร์ฟเวอร์เรียกบริการตรวจสอบจริง แต่ตรวจเพียงว่าคำขอสำเร็จหรือไม่ ไม่ตรวจเนื้อหาคำตอบ หรือกำหนดเกณฑ์คะแนน reCAPTCHA v3 เป็น 0 ซึ่งยอมรับทุกคะแนนที่บริการส่งกลับ ตัวประมวลผลบางตัวยัง “เปิดให้ผ่านเมื่อผิดพลาด”: หากไม่มีโทเค็นหรือตรวจสอบล้มเหลวก็ยังรับข้อความ บอตจึงเพียงไม่ส่งโทเค็นมา
เมื่อวิดเจ็ตไม่เคยโหลดจริง
การตั้งค่าผิดแบบอื่นทำให้ฝั่งเบราว์เซอร์เสียแทน หากคีย์เว็บไซต์ไม่ได้ลงทะเบียนสำหรับโดเมน ซึ่งพบบ่อยหลังย้ายจากสเตจจิงสู่ระบบจริง เปลี่ยนโดเมน หรือเพิ่มโดเมนย่อย ผู้ให้บริการจะไม่ออกโทเค็นและแสดงข้อผิดพลาดในวิดเจ็ตหรือคอนโซลเบราว์เซอร์ หลังเปลี่ยนธีมหรืออัปเดตปลั๊กอิน มาร์กอัปวิดเจ็ตอาจยังอยู่ในหน้าแต่สคริปต์ที่ทำให้ทำงานหายไป เครื่องมือขอความยินยอมคุกกี้อาจส่งผลแบบเดียวกันหากบล็อกสคริปต์ CAPTCHA จนกว่าผู้เยี่ยมชมจะยอมรับ สิ่งที่เกิดขึ้นต่อไปขึ้นกับเซิร์ฟเวอร์: หากยืนยันว่าต้องมีโทเค็นถูกต้อง ผู้เยี่ยมชมจริงจะส่งข้อความไม่ได้และไม่มีใครสังเกตข้อความสอบถามที่สูญหาย แต่หากไม่ยืนยัน บอตก็ผ่านได้อย่างอิสระ
ยังมีอีกสองกรณีที่มองข้ามง่าย สำหรับ reCAPTCHA v3 ป้ายที่มุมเพียงแสดงว่าสคริปต์ถูกโหลดไว้ที่ใดที่หนึ่งบนหน้า อาจโดยธีมหรือปลั๊กอินอื่น ขณะที่การเชื่อมต่อในปลั๊กอินแบบฟอร์มเองปิดอยู่ และปลั๊กอินแคชอาจเก็บหน้าไว้พร้อมโทเค็นที่ฝังใน HTML โทเค็น CAPTCHA ใช้ได้เพียงไม่กี่นาทีและตรวจสอบได้ครั้งเดียว โทเค็นที่อยู่ในแคชจึงล้มเหลวสำหรับผู้เยี่ยมชมจริง การ “แก้ไข” ที่ชวนให้ทำด้วยการปิดการตรวจสอบจะถอดการป้องกันออกอย่างเงียบ ๆ
- วิดเจ็ตแสดงข้อความว่า “สำหรับการทดสอบเท่านั้น”
- มีป้าย v3 อยู่ที่มุม
- วิดเจ็ตแสดงผลและส่งโทเค็นกลับ
- สแปมหยุดแล้ว แต่ข้อความสอบถามจริงก็หยุดด้วย
- กำลังใช้คีย์ทดสอบสาธารณะและการตรวจสอบสำเร็จทุกครั้ง
- การเชื่อมต่อ reCAPTCHA ในปลั๊กอินแบบฟอร์มปิดอยู่
- เซิร์ฟเวอร์ไม่เคยส่งโทเค็นไปตรวจสอบ หรือเพิกเฉยต่อผลลัพธ์
- คีย์เว็บไซต์ไม่ได้ลงทะเบียนสำหรับโดเมน หรือโทเค็นในแคชหมดอายุ
ตรวจด้วยตนเองอย่างรวดเร็ว
- 1เปิดหน้าแบบฟอร์มในหน้าต่างส่วนตัว เปิดเครื่องมือสำหรับนักพัฒนาของเบราว์เซอร์ แล้วดูข้อผิดพลาดจากสคริปต์ CAPTCHA ในคอนโซล
- 2ตรวจว่าวิดเจ็ตปรากฏจริง ทั้งก่อนและหลังยอมรับแบนเนอร์คุกกี้ และไม่สามารถส่งแบบฟอร์มได้ขณะไม่มีวิดเจ็ต
- 3ในคอนโซลผู้ดูแลของผู้ให้บริการ ตรวจว่าคีย์เว็บไซต์ระบุโดเมนที่ใช้งานจริง รวมถึงรูปแบบอื่น เช่น www และคีย์ในปลั๊กอินแบบฟอร์มหรือโค้ดตรงกัน ไม่ใช่คีย์จากเอกสารหรือตัวระบบสเตจจิง
- 4ในการตั้งค่าปลั๊กอินแบบฟอร์ม ตรวจว่าเปิดการเชื่อมต่อ CAPTCHA สำหรับแบบฟอร์มนี้โดยเฉพาะ สำหรับ reCAPTCHA v3 ให้ตรวจว่าเกณฑ์คะแนนสูงกว่า 0
- 5หากเข้าถึงโค้ดได้ ให้หาการตรวจสอบฝั่งเซิร์ฟเวอร์และตรวจว่าปฏิเสธการส่งเมื่อคำตอบเป็นลบหรือไม่มีโทเค็น
- 6ยกเว้นหน้าแบบฟอร์มจากการแคชทั้งหน้า หรือตรวจให้แน่ใจว่าสร้างโทเค็นใหม่ในเบราว์เซอร์
- 7ส่งข้อความทดสอบจริงและตรวจว่าส่งถึง ทำซ้ำหลังเปลี่ยนธีม ปลั๊กอิน หรือเครื่องมือขอความยินยอม
CAPTCHA เป็นการป้องกันชั้นหนึ่ง ไม่ใช่ทั้งหมด เมื่อใช้ร่วมกับช่องดักบอต การตรวจสอบเวลา และการกรองฝั่งเซิร์ฟเวอร์ การตั้งค่าผิดจุดเดียวจะไม่ทำให้แบบฟอร์มเปิดโล่ง หากต้องการเห็นภาพสถานะแบบฟอร์มอย่างรวดเร็ว ให้กรอกโดเมนที่ formexposed.com รายงานจะแสดงว่าส่วนของการตั้งค่า CAPTCHA ที่มองเห็นจากภายนอกเรียบร้อยหรือไม่