Referenz

CAPTCHA-Token in eigene Formulare einsetzen: Referenz für Standardintegration

Anwendungsbereich: Diese Referenz gilt ausschließlich für Ihre eigenen oder ausdrücklich autorisierten QA-, Staging- und Produktionsumgebungen. Sie beschreibt die Standardintegration eines CAPTCHA-Tokens in Ihre eigenen Formulare – nicht das Manipulieren fremder Seiten oder unautorisierte Workflows.

Ein von CaptchaAI gelöster CAPTCHA-Token gehört in genau ein Ziel: das versteckte Eingabefeld, das der jeweilige Anbieter in Ihrem Formular vorsieht – bei reCAPTCHA das Feld g-recaptcha-response, bei Cloudflare Turnstile cf-turnstile-response. Sie tragen den Wert dort ein, senden das Formular ab und prüfen den Token anschließend serverseitig. Mehr braucht die Standardintegration in aller Regel nicht.

Diese Referenz fasst die drei Muster zusammen, die dabei praktisch relevant sind: das versteckte Feld in einer klassischen HTML-Form, der Token im JSON-Body eines eigenen Frontends und die serverseitige Verifizierung. Alle Beispiele beziehen sich auf Formulare, die Sie selbst betreiben.

Welches Feld erwartet welcher Anbieter?

Jeder Anbieter legt einen festen Feldnamen fest. Halten Sie sich exakt daran – ein abweichender Name führt dazu, dass der Token stillschweigend ignoriert wird.

CAPTCHA-Typ Erwartete Ablage Serverseitige Prüfung
reCAPTCHA v2/v3 verstecktes Feld g-recaptcha-response https://www.google.com/recaptcha/api/siteverify
Cloudflare Turnstile Feld cf-turnstile-response https://challenges.cloudflare.com/turnstile/v0/siteverify
Cloudflare Challenge Cookie cf_clearance (kein Token) erneuter Seitenaufruf mit gesetztem Cookie

CaptchaAI liefert für reCAPTCHA v2/v3 und Turnstile jeweils den Token-String. Bei Cloudflare Challenge erhalten Sie stattdessen ein cf_clearance-Cookie, das in denselben Session-Kontext gehört wie der Solve – gleicher User-Agent, gleicher Proxy.

Muster 1: Verstecktes Feld in einer eigenen HTML-Form

In einer klassisch serverseitig verarbeiteten Form enthält Ihr Markup bereits ein verstecktes Feld mit dem vorgesehenen Namen. Vor dem Absenden schreiben Sie den gelösten Token hinein:

<form id="signup-form" method="post" action="/api/signup">
  <input name="email" type="email" required />
  <input name="g-recaptcha-response" type="hidden" />
  <button type="submit">Konto anlegen</button>
</form>
async function submitWithCaptcha(form, token) {
  form.querySelector('[name="g-recaptcha-response"]').value = token;
  form.submit();
}

Der Browser überträgt das Feld anschließend wie jedes andere Formularfeld an Ihren Endpunkt. Entscheidend ist nur, dass zwischen dem Eintragen und dem Absenden möglichst wenig Zeit vergeht – dazu gleich mehr.

Muster 2: Token im JSON-Body des eigenen Frontends

Sendet Ihr Frontend die Daten als JSON an eine eigene API, gehört der Token in den Request-Body als reguläres Feld – niemals in einen benutzerdefinierten Header:

await fetch('/api/contact', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ email, message, captcha: token }),
});

Der Schlüssel im JSON-Objekt ist frei wählbar (hier captcha), solange Ihr Backend genau diesen Schlüssel ausliest und den Wert danach gegen den offiziellen Endpunkt prüft.

Muster 3: Serverseitige Verifizierung

Unabhängig vom gewählten Muster gilt: Ihr eigener Server muss den Token gegen den offiziellen Verifizierungsendpunkt des Anbieters prüfen, bevor er die Anfrage verarbeitet. Die clientseitige Anzeige allein ist kein Nachweis.

import requests

def verify_recaptcha(token: str, secret: str) -> bool:
    resp = requests.post(
        'https://www.google.com/recaptcha/api/siteverify',
        data={'secret': secret, 'response': token},
        timeout=10,
    )
    resp.raise_for_status()
    payload = resp.json()
    return bool(payload.get('success')) and payload.get('score', 1.0) >= 0.5

Bei reCAPTCHA v3 werten Sie zusätzlich das score-Feld aus (0,0 bis 1,0) und legen einen Schwellenwert fest – 0,5 ist ein üblicher Startpunkt, den Sie an Ihr Risikoprofil anpassen. Für Turnstile entfällt der Score; hier genügt das success-Flag der Antwort.

Ablauf und Timing

Ein Token ist nur kurz gültig. Tragen Sie ihn deshalb erst unmittelbar vor dem Absenden ein und halten Sie ihn nicht auf Vorrat. Die üblichen Fristen:

CAPTCHA-Typ Einsetzen und absenden innerhalb von
reCAPTCHA v2 120 Sekunden
reCAPTCHA v3 120 Sekunden
Cloudflare Turnstile 300 Sekunden (5 Minuten)
Cloudflare Challenge (Cookie) 15–30 Minuten

Läuft die Frist ab, lehnt der Verifizierungsendpunkt den Token mit timeout-or-duplicate ab. Fordern Sie dann pro Aktion einen frischen Token an, statt einen alten erneut zu verwenden.

Beispiel: Registrierungsformular in einer Shopware-Staging-Umgebung

Ein typisches DACH-Szenario: Sie prüfen das Registrierungsformular eines Shopware- oder JTL-Shops in Ihrer eigenen Staging-Umgebung, etwa unter https://staging.shop.example.test. Das Formular schützt ein reCAPTCHA v2. Im QA-Lauf lösen Sie die Abfrage über CaptchaAI, tragen den Token in das Feld g-recaptcha-response ein und senden ab. Ihr Backend – ob auf Hetzner, IONOS oder netcup betrieben – ruft anschließend siteverify auf und legt das Konto erst nach success: true an. So testen Sie den vollständigen Pfad vom CAPTCHA bis zur Kontoerstellung, ohne die Abfrage manuell anklicken zu müssen.

Enthält eine Seite mehrere Widgets, besitzt jedes seine eigene g-recaptcha-response-Ablage. Wählen Sie das Feld dann gezielt über das umgebende Formular aus, statt pauschal das erste Element der Seite zu befüllen.

Häufige Fehler in eigenen Integrationen

Symptom Ursache Lösung
400 vom Verifizierungsendpunkt Falscher Feldname im Formular An den vorgesehenen Feldnamen halten
Token wird abgelehnt Gültigkeitsdauer überschritten Token direkt nach der Lösung absenden
success: false mit timeout-or-duplicate Token mehrfach verwendet Pro Aktion einen neuen Token anfordern
success: false mit invalid-input-secret Secret und Sitekey passen nicht zusammen Konfiguration pro Umgebung prüfen
Cookie greift nicht auf Subdomains Domain ohne führenden Punkt gesetzt .example.com mit Punkt verwenden

FAQ

Wie lange ist ein gelöster Token gültig?

Bei reCAPTCHA v2 und v3 etwa 120 Sekunden, bei Turnstile bis zu 300 Sekunden. Setzen Sie den Token also erst kurz vor dem Absenden ein und fordern Sie bei Zeitüberschreitung einen neuen an.

Muss ich den Token zwingend serverseitig prüfen?

Ja. Erst der Abgleich mit dem offiziellen siteverify-Endpunkt bestätigt, dass der Token echt und gültig ist. Eine reine Anzeige im Browser lässt sich fälschen und ersetzt die Prüfung nicht.

Was bedeutet timeout-or-duplicate in der Antwort?

Dass der Token abgelaufen ist oder bereits verwendet wurde. Tokens sind Einmalwerte – fordern Sie pro Formularabsendung einen frischen an und senden Sie ihn zügig ab.

Kann ich denselben Token für mehrere Formulare wiederverwenden?

Nein. Jeder Token ist an eine einzelne Absendung gebunden; eine zweite Verwendung scheitert an der serverseitigen Prüfung. Für getrennte Aktionen lösen Sie jeweils neu.

Verwandte Leitfäden

Standardkonforme Token-Integration in eigenen Formularen – Starten Sie mit CaptchaAI.

Kommentare sind für diesen Artikel deaktiviert.