AWS WAF Captcha erklärt und wie Sie damit umgehen
Das AWS-WAF-Captcha ist eine Challenge, die die Web Application Firewall von Amazon ausliefert, wenn ein Website-Betreiber sie so konfiguriert hat, dass sie Besucher prüft. Eine Anfrage, die die Firewall für verdächtig hält, erhält statt des Inhalts eine Challenge-Seite. Der Besucher muss dann eine Prüfung bestehen, bevor die eigentliche Seite lädt. Wenn Sie beim Testen oder Sammeln von Daten darauf stoßen, müssen Sie wissen, wie Sie es erkennen, was der Betreiber kontrolliert und was Scarnox heute tun kann. Dieser Leitfaden behandelt alle drei Punkte.
Was das AWS-WAF-Captcha ist
AWS WAF ist eine Regel-Engine, die vor einer Webanwendung sitzt, auf Amazon CloudFront, einem Application Load Balancer oder einem API Gateway. Regeln können eine Anfrage erlauben, blockieren, zählen oder herausfordern. Eine Challenge kann eine stille JavaScript-Prüfung oder ein sichtbares Captcha-Rätsel sein, je nachdem, wie die Regel eingestellt ist.
Der wichtige Punkt ist, dass die Entscheidung beim Betreiber der Website liegt. Die Firewall kennt den Zweck Ihres Scrapers nicht. Sie bewertet nur den Traffic, den sie sieht: die Rate der Anfragen, den Ruf der IP-Adresse, die Header und das Verhalten des Clients.
So erkennen Sie es im Code
AWS-WAF-Challenges lassen sich oft an ihren Antworten erkennen. Ein häufiges Signal ist der Antwort-Header x-amzn-waf-action, und eine Challenge wird oft mit dem HTTP-Status 202 ausgeliefert, bevor die eigentliche Seite erscheint. Betrachten Sie diese als Hinweise, nicht als Beweis, denn Websites konfigurieren die Firewall unterschiedlich:
import requests
def looks_like_aws_waf(resp: requests.Response) -> bool:
# Ein Header-Signal, kein Beweis. Gegen die getestete Seite prüfen.
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)
Achten Sie außerdem im Quelltext der Seite auf ein Skript, das von einem AWS-WAF-Challenge-Pfad geladen wird, und auf eine Seite, die keinen Inhalt zeigt, bis ein Skript läuft. Ein einfacher requests-Aufruf bekommt oft die Challenge-Seite statt der Daten. Das ist zu erwarten.
Was der Betreiber tun kann
Wenn Sie die Website betreiben, lassen sich in der AWS-WAF-Konsole die Regeln feinabstimmen, die eine Challenge auslösen. Die nützlichsten Optionen sind:
- Ratenbasierte Regeln, die nur Clients herausfordern, die zu viele Anfragen senden, damit normale Besucher durchkommen.
- Allowlists für Ihr eigenes Monitoring, CI oder IP-Bereiche von Partnern, damit Ihre eigenen Tests nicht herausgefordert werden.
- Eine Challenge nur auf sensiblen Pfaden, etwa Login oder Checkout, statt auf der ganzen Website.
Wenn Sie Ihre eigene Website testen, ist die sauberste Lösung eine Allowlist für Ihre Test-Runner. Versuchen Sie nicht, die Challenge auf einer Website zu umgehen, die Ihnen nicht gehört. Das ist der Schutz des Betreibers, und er ist das Erste, was Ihren Zugang unterbricht.
Wo die Unterstützung durch Scarnox steht
- Heute live: PopularCaptcha, proxyless und mit eigenem Proxy.
- Bald verfügbar: AWS WAF, zusammen mit GeeTest, reCAPTCHA v2 und v3, Cloudflare Turnstile und Arkose. Bauen Sie keinen produktiven Ablauf, der auf einer AWS-WAF-Lösung beruht, bis sie als live gelistet ist.
Wenn eine Website, mit der Sie arbeiten dürfen, heute eine AWS-WAF-Challenge zeigt, sind Ihre Optionen die oben genannten: langsamer werden, eine Allowlist nutzen, wenn die Website Ihnen gehört, oder den Betreiber um eine API oder einen Datenfeed bitten. Sie können ein Konto erstellen und mit einer kostenlosen Testphase starten, ganz ohne Karte, um Ihren PopularCaptcha-Ablauf jetzt einzurichten und vorbereitet zu sein, wenn die AWS-WAF-Unterstützung live geht. Die aktuellen Preise stehen auf der Preisseite.
Ihre eigene Seite hinter AWS WAF testen
Wenn Sie der Betreiber sind und automatisierte Tests die Firewall passieren lassen wollen, ohne sie für echte Besucher zu schwächen, nutzen Sie die eigenen Werkzeuge der Firewall, statt die Challenge zu umgehen:
- Legen Sie eine neue Regel im Zählmodus an. Sie protokolliert die Anfragen, die herausgefordert worden wären, ohne jemanden zu beeinträchtigen, sodass Sie genau sehen, was Ihre Tests auslösen.
- Aktivieren Sie das WAF-Logging nach Amazon CloudWatch Logs, Amazon S3 oder Amazon Data Firehose. Das Log zeigt, welche Regel gegriffen hat und welcher Header oder Pfad die Ursache war.
- Geben Sie der Testumgebung eine eigene Staging-Domain mit einem separaten Regelsatz, damit die Produktion geschützt bleibt, während Ihre Suite frei laufen kann.
- Setzen Sie nur die IP-Bereiche oder Header-Werte auf die Allowlist, die Ihre Test-Runner verwenden, und prüfen Sie diese Liste jedes Mal, wenn sich die Runner ändern.
Diese Schritte halten den Schutz aufrecht und machen den Test-Traffic vorhersagbar, und genau das brauchen Sie. Prüfen Sie die Regeln nach jeder Änderung an Ihrem Testaufbau, denn eine Regel, die für die Runner des letzten Monats richtig war, kann sie jetzt blockieren.
Verantwortungsvoll scrapen
Wenn Sie eine AWS-WAF-Seite aufrufen, um Daten zu sammeln:
- Lesen Sie die
robots.txtund die Nutzungsbedingungen der Website, bevor Sie Anfragen senden. - Halten Sie die Anfragerate niedrig. Eine Challenge ist oft die Aufforderung der Website, langsamer zu werden.
- Hören Sie auf, wenn die Website eindeutig keinen automatisierten Zugriff wünscht.
- Sammeln Sie keine personenbezogenen Daten, die Sie nicht brauchen, und behandeln Sie die, die Sie sammeln, nach den geltenden Datenschutzregeln.