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:
- Luật theo tần suất chỉ thử thách những client gửi quá nhiều yêu cầu, để khách truy cập bình thường vẫn qua được.
- Danh sách cho phép cho các dải IP giám sát, CI hoặc đối tác của bạn, để các kiểm thử của chính bạn không bị thử thách.
- Thử thách chỉ trên các đường dẫn nhạy cảm, như đăng nhập hoặc thanh toán, thay vì toàn bộ website.
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
- Đang chạy: PopularCaptcha, proxyless và với proxy riêng của bạn.
- Sắp ra mắt: AWS WAF, cùng với GeeTest, reCAPTCHA v2 và v3, Cloudflare Turnstile và Arkose. Đừng thiết kế một luồng production dựa vào việc giải AWS WAF cho đến khi nó được liệt kê là đang chạy.
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:
- Tạo một luật mới ở chế độ count. Nó ghi lại các yêu cầu lẽ ra đã bị thử thách mà không ảnh hưởng đến ai, nên bạn thấy chính xác các kiểm thử của mình kích hoạt điều gì.
- Bật ghi log WAF vào Amazon CloudWatch Logs, Amazon S3 hoặc Amazon Data Firehose. Log cho bạn biết luật nào khớp và header hoặc đường dẫn nào gây ra.
- Cấp cho môi trường kiểm thử một tên miền staging riêng với bộ luật tách biệt, để production vẫn được bảo vệ trong khi bộ kiểm thử chạy thoải mái.
- Chỉ đưa vào danh sách cho phép các dải IP hoặc giá trị header cụ thể mà máy chạy kiểm thử của bạn dùng, và xem lại danh sách đó mỗi khi máy chạy thay đổi.
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
robots.txtvà điều khoản sử dụng của website trước khi gửi yêu cầu. - Giữ tốc độ yêu cầu thấp. Thử thách thường là website đang yêu cầu bạn chậm lại.
- Dừng lại khi website rõ ràng không muốn truy cập tự động.
- Không thu thập dữ liệu cá nhân mà bạn không có lý do để giữ, và xử lý mọi dữ liệu cá nhân đã thu thập theo các quy định về quyền riêng tư hiện hành.