Scarnox · Blog

Captcha AWS WAF là gì và cách xử lý

Captcha AWS WAF là một thử thách do Web Application Firewall của Amazon phục vụ khi chủ website đã cấu hình để kiểm tra khách truy cập. Một yêu cầu mà firewall coi là đáng ngờ sẽ nhận được một trang thử thách thay vì nội dung. Khách truy cập sau đó phải vượt qua một kiểm tra trước khi trang thật được tải. Nếu bạn gặp nó khi đang kiểm thử hoặc thu thập dữ liệu, bạn cần biết cách nhận diện, chủ website kiểm soát được những gì, và Scarnox làm được gì hiện nay. Hướng dẫn này bao quát cả ba.

Captcha AWS WAF là gì

AWS WAF là một bộ máy luật đặt phía trước một ứng dụng web, trên Amazon CloudFront, Application Load Balancer hoặc API Gateway. Các luật có thể cho phép, chặn, đếm hoặc thử thách một yêu cầu. Thử thách có thể là một kiểm tra JavaScript âm thầm hoặc một câu đố captcha hiển thị, tùy theo cách luật được thiết lập.

Điểm quan trọng là quyết định do chủ website đưa ra. Firewall không biết mục đích của scraper của bạn. Nó chỉ chấm điểm lưu lượng mà nó thấy: tần suất yêu cầu, uy tín IP, header và hành vi của client.

Cách nhận diện trong code

Thử thách AWS WAF thường có thể nhận ra qua phản hồi của chúng. Một dấu hiệu phổ biến là header phản hồi x-amzn-waf-action, và thử thách thường được trả về với mã HTTP 202 trước khi trang thật xuất hiện. Hãy xem đây là tín hiệu chứ không phải bằng chứng, vì các website cấu hình firewall khác nhau:

import requests

def looks_like_aws_waf(resp: requests.Response) -> bool:
    # Chỉ là tín hiệu từ header, không phải bằng chứng. Hãy đối chiếu với trang bạn đang kiểm thử.
    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)

Ngoài ra, hãy tìm một script được tải từ đường dẫn thử thách AWS WAF trong mã nguồn trang, và một trang không hiển thị nội dung cho đến khi script chạy. Một lệnh requests thuần thường sẽ nhận được trang thử thách thay vì dữ liệu. Điều này là bình thường.

Chủ website có thể làm gì

Nếu bạn vận hành website, console AWS WAF cho phép bạn tinh chỉnh các luật kích hoạt thử thách. Các tùy chọn hữu ích nhất gồm:

Nếu chính bạn đang kiểm thử website của mình, cách sạch nhất là đưa các máy chạy kiểm thử vào danh sách cho phép. Đừng cố vô hiệu hóa thử thách trên một website bạn không kiểm soát. Đó là lớp bảo vệ của chủ website, và đó cũng là thứ đầu tiên sẽ chặn quyền truy cập của bạn.

Hỗ trợ của Scarnox hiện nay

Vì vậy, nếu một website mà bạn được phép làm việc cùng hiện đang hiển thị thử thách AWS WAF, các lựa chọn là những cách trên: chậm lại, dùng danh sách cho phép nếu website là của bạn, hoặc hỏi chủ website về API hay nguồn dữ liệu. Bạn có thể tạo tài khoản và bắt đầu với tín dụng dùng thử miễn phí, không cần thẻ, để thiết lập luồng PopularCaptcha ngay bây giờ và sẵn sàng khi hỗ trợ AWS WAF ra mắt. Bảng giá hiện tại có trên trang giá.

Kiểm thử website của bạn đằng sau AWS WAF

Nếu bạn là chủ website và muốn các kiểm thử tự động vượt qua firewall mà không làm yếu nó đối với khách truy cập thật, hãy dùng công cụ của chính firewall thay vì đi vòng qua thử thách:

Những bước này giữ nguyên lớp bảo vệ và làm cho lưu lượng kiểm thử có thể dự đoán được, đó chính là kết quả bạn thực sự cần. Hãy xem lại các luật sau mỗi thay đổi trong thiết lập kiểm thử, vì một luật từng đúng với máy chạy của tháng trước có thể đang chặn chúng bây giờ.

Thu thập dữ liệu có trách nhiệm

Nếu lý do bạn chạm vào trang AWS WAF là để thu thập dữ liệu:

Các bước tiếp theo