AWS WAF captcha คืออะไรและจัดการอย่างไร
AWS WAF captcha คือการท้าทายที่ส่งมาจาก Web Application Firewall ของ Amazon เมื่อเจ้าของเว็บตั้งค่าให้ตรวจสอบผู้เข้าชม คำขอที่ firewall มองว่าน่าสงสัยจะได้รับหน้าท้าทายแทนเนื้อหา ผู้เข้าชมต้องผ่านการตรวจสอบก่อนที่หน้าจริงจะโหลด หากคุณเจอเรื่องนี้ระหว่างการทดสอบหรือการเก็บข้อมูล คุณต้องรู้วิธีจดจำมัน สิ่งที่เจ้าของเว็บควบคุมได้ และสิ่งที่ Scarnox ทำได้ในตอนนี้ คู่มือนี้ครอบคลุมทั้งสามเรื่อง
AWS WAF captcha คืออะไร
AWS WAF คือ rules engine ที่วางอยู่หน้าเว็บแอปพลิเคชัน บน Amazon CloudFront, Application Load Balancer หรือ API Gateway กฎสามารถอนุญาต บล็อก นับ หรือท้าทายคำขอได้ การท้าทายอาจเป็นการตรวจสอบ JavaScript แบบเงียบ หรือ captcha แบบปริศนาที่มองเห็น ขึ้นอยู่กับการตั้งค่ากฎ
ประเด็นสำคัญคือการตัดสินใจอยู่ที่เจ้าของเว็บไซต์ firewall ไม่รู้ว่าสคริปต์ของคุณมีวัตถุประสงค์อะไร มันแค่ประเมินทราฟฟิกที่มองเห็น ได้แก่ อัตราคำขอ ชื่อเสียงของ IP header และพฤติกรรมของ client
วิธีจดจำในโค้ด
การท้าทายของ AWS WAF มักระบุตัวตนได้จากการตอบกลับ สัญญาณที่พบบ่อยคือ header การตอบกลับ x-amzn-waf-action และการท้าทายมักถูกส่งมาด้วยสถานะ HTTP 202 ก่อนที่หน้าจริงจะปรากฏ ให้ถือว่าสิ่งเหล่านี้เป็นสัญญาณ ไม่ใช่หลักฐานยืนยัน เพราะเว็บแต่ละแห่งตั้งค่า firewall ต่างกัน
import requests
def looks_like_aws_waf(resp: requests.Response) -> bool:
# เป็นสัญญาณจาก header ไม่ใช่หลักฐานยืนยัน ให้ตรวจสอบกับหน้าที่คุณกำลังทดสอบ
return "x-amzn-waf-action" in resp.headers
resp = requests.get("https://example.com/products", timeout=30)
if looks_like_aws_waf(resp):
print("Challenge served. Stop, slow down, and check your request rate.")
else:
print("Status", resp.status_code)
นอกจากนี้ให้มองหาสคริปต์ที่โหลดจาก path ของการท้าทาย AWS WAF ในซอร์สของหน้า และหน้าที่ไม่แสดงเนื้อหาจนกว่าสคริปต์จะทำงาน การเรียก requests ธรรมดามักได้รับหน้าท้าทายแทนข้อมูล ซึ่งเป็นเรื่องที่คาดไว้
เจ้าของเว็บทำอะไรได้บ้าง
หากคุณดูแลเว็บไซต์ คอนโซลของ AWS WAF ให้คุณปรับกฎที่กระตุ้นการท้าทายได้ ตัวเลือกที่มีประโยชน์ที่สุดคือ
- กฎแบบอิงอัตรา (Rate-based rules) ที่ท้าทายเฉพาะ client ที่ส่งคำขอมากเกินไป เพื่อให้ผู้เข้าชมปกติผ่านได้
- Allowlist สำหรับ monitoring ของคุณเอง CI หรือช่วง IP ของพันธมิตร เพื่อไม่ให้การทดสอบของคุณเองถูกท้าทาย
- ท้าทายเฉพาะเส้นทางที่สำคัญ เช่น การเข้าสู่ระบบหรือการชำระเงิน แทนที่จะท้าทายทั้งเว็บ
หากคุณกำลังทดสอบเว็บของตัวเอง วิธีที่สะอาดที่สุดคือทำ allowlist ให้ test runner ของคุณ อย่าพยายามเอาชนะการท้าทายบนเว็บที่คุณไม่ได้ควบคุม นั่นคือการป้องกันของเจ้าของ และเป็นสิ่งแรกที่จะทำให้การเข้าถึงของคุณหยุดทำงาน
สถานะการรองรับของ Scarnox
- ใช้งานได้แล้ววันนี้: PopularCaptcha แบบ proxyless และแบบใช้ proxy ของคุณเอง
- เร็ว ๆ นี้: AWS WAF ร่วมกับ GeeTest, reCAPTCHA v2 และ v3, Cloudflare Turnstile และ Arkose อย่าออกแบบโฟลว์ระดับโปรดักชันที่พึ่งการแก้ AWS WAF จนกว่าจะระบุว่าใช้งานได้แล้ว
ดังนั้นหากเว็บที่คุณได้รับอนุญาตให้ทำงานด้วยแสดงการท้าทาย AWS WAF ในวันนี้ ตัวเลือกคือแบบที่กล่าวไปข้างต้น ได้แก่ ชะลอคำขอ ใช้ allowlist หากเว็บเป็นของคุณ หรือขอ API หรือ data feed จากเจ้าของเว็บ คุณสามารถ สร้างบัญชี และเริ่มด้วยเครดิตทดลองใช้ฟรี ไม่ต้องใช้บัตร เพื่อตั้งค่าโฟลว์ PopularCaptcha ของคุณตอนนี้และพร้อมเมื่อการรองรับ AWS WAF เปิดใช้งาน ราคาปัจจุบัน อยู่ในหน้าราคา
ทดสอบเว็บของคุณที่อยู่หลัง AWS WAF
หากคุณเป็นเจ้าของเว็บและต้องการให้การทดสอบอัตโนมัติผ่าน firewall โดยไม่ทำให้การป้องกันอ่อนลงสำหรับผู้เข้าชมจริง ให้ใช้เครื่องมือของ firewall เอง แทนการเลี่ยงการท้าทาย
- เริ่มกฎใหม่ในโหมด count ซึ่งจะบันทึกคำขอที่จะถูกท้าทายโดยไม่ส่งผลต่อใคร เพื่อให้คุณเห็นว่าการทดสอบของคุณกระตุ้นอะไรบ้างอย่างแน่ชัด
- เปิด WAF logging ไปยัง Amazon CloudWatch Logs, Amazon S3 หรือ Amazon Data Firehose log จะบอกว่ากฎใดตรงและ header หรือ path ใดเป็นต้นเหตุ
- ให้สภาพแวดล้อมทดสอบมีโดเมน staging ของตัวเองพร้อมชุดกฎแยกต่างหาก เพื่อให้ production ยังคงได้รับการป้องกันขณะที่ชุดทดสอบของคุณรันได้อย่างอิสระ
- ทำ allowlist เฉพาะช่วง IP หรือค่า header ที่ test runner ของคุณใช้เท่านั้น และทบทวนรายการนี้ทุกครั้งที่ runner เปลี่ยน
ขั้นตอนเหล่านี้ทำให้การป้องกันยังอยู่และทำให้ทราฟฟิกของการทดสอบคาดเดาได้ ซึ่งเป็นผลลัพธ์ที่คุณต้องการจริง ๆ ทบทวนกฎหลังการเปลี่ยนแปลงทุกครั้งในการตั้งค่าการทดสอบ เพราะกฎที่ถูกต้องสำหรับ runner ของเดือนที่แล้วอาจบล็อกมันในตอนนี้
การ scrape อย่างรับผิดชอบ
หากเหตุผลที่คุณเข้าถึงหน้า AWS WAF คือการเก็บข้อมูล
- อ่าน
robots.txtและข้อกำหนดการใช้งานของเว็บก่อนส่งคำขอ - รักษาอัตราคำขอให้ต่ำ การท้าทายมักเป็นวิธีที่เว็บบอกให้คุณชะลอ
- หยุดเมื่อเว็บชัดเจนว่าไม่ต้องการการเข้าถึงอัตโนมัติ
- อย่าเก็บข้อมูลส่วนบุคคลที่ไม่มีเหตุผลให้ถือไว้ และจัดการข้อมูลส่วนบุคคลใด ๆ ที่เก็บมาตามกฎความเป็นส่วนตัวที่ใช้บังคับ