Erkennung
Wie die Risk Engine bewertet, wie Profile und Policies greifen und was im Angriffsfall passiert.
Auf dieser Seite
Adaptive Risk Engine
Der Risk-Score ist die gewichtete Summe aller Penalties (0-100). Die Schwellwerte werden durch das aktive Site-Profil und die Form-Policy bestimmt. Die V2 Response enthält zusätzlich einen Confidence-Score (0.0-1.0) und maschinenlesbare Reason-Codes.
| Score | Aktion | Bedeutung |
|---|---|---|
| 0-29 | allow | Menschlich, durchlassen |
| 30-59 | challenge | Verdacht, wird durchgelassen aber geloggt |
| 60-100 | block | Bot erkannt, blockieren |
Penalty-Faktoren
pow_failed: +100 PoW falsch oder fehlend nonce_reused: +100 Replay-Angriff ip_blocked: +100 IP auf Blockliste rate_limit_hit: +80 Zu viele Requests user_agent_headless: +70 Puppeteer/Playwright tor_exit: +60 TOR Exit Node behavior_bot: +50 Verhalten bot-typisch time_too_fast: +35 Submit < 1.5 Sekunden asn_hosting: +25 Rechenzentrum-ASN behavior_suspicious: +20 Verhalten verdächtig
V2.1 Advanced Bot Detection
Zusätzliche Signale die selbst getarnte Headless-Browser entlarven. Alle Prüfungen sind kontextsensitiv: Mobile Geräte und Privacy-Browser (Safari/Firefox) werden korrekt als legitim erkannt und nicht falsch geflaggt.
env_automation_globals: +90 Selenium/Puppeteer/CDP Leak im window-Objekt env_ua_brand_bot: +80 UA Client Hints verraten Automation-Framework env_software_renderer: +50 WebGL nutzt SwiftShader/llvmpipe = headless env_canvas_too_fast: +40 Canvas-Render < 2ms = headless (Mensch: 5-50ms) env_no_storage: +30 localStorage UND indexedDB fehlen env_raf_robotic: +25 requestAnimationFrame perfekt uniform (CV < 0.05) env_no_webgl_ext: +25 0 WebGL-Extensions auf Desktop = headless header_no_sec_fetch: +25 Sec-Fetch-* Header fehlen = altes/scripted Client header_no_accept_lang: +20 Accept-Language fehlt = scripted env_no_hover: +5 Hover nicht unterstützt (selten valide auf Desktop) env_audio_hash_missing: +5 OfflineAudioContext blockiert (Privacy-Browser ok)
V2.1 erhöht die Erkennungsrate von Stealth-Frameworks (Playwright Stealth, Puppeteer Stealth) deutlich, ohne legitime Nutzer zu beeinträchtigen.
Site-Profile & Form-Policies
Die V2 Risk Engine bewertet kontextabhängig: Login-Formulare werden strenger bewertet als Kontaktformulare. Site-Profile definieren die Grundhaltung, Form-Policies überschreiben gezielt pro Formular-Typ.
Site-Profile (Presets)
Jede Site wird einem Profil zugeordnet. Das Profil bestimmt Schwellen, Challenge-Typen und Behavioral-Gewichtungen.
| Profil | Allow < | Challenge < | Difficulty | Einsatz |
|---|---|---|---|---|
| Low Friction | 40 | 70 | 2 | Newsletter, Kommentare, Info-Seiten |
| Balanced | 30 | 60 | 4 | Standard für die meisten Formulare |
| Auth Hardened | 20 | 50 | 5 | Login, Registrierung, Passwort-Reset |
| High Security | 15 | 40 | 6 | Checkout, Admin-Aktionen, Bezahlung |
Form-Policies
Form-Policies überschreiben das Site-Profil für bestimmte Formular-Typen. Der form_type wird beim Verify-Request mitgeschickt.
| form_type | Profil | Allow < | Challenge < | Fail-Mode |
|---|---|---|---|---|
| login | Auth Hardened | 20 | 50 | fail_closed |
| register | Auth Hardened | 20 | 50 | fail_closed |
| password_reset | High Security | 15 | 40 | fail_closed |
| checkout | High Security | 15 | 40 | fail_closed |
| contact | Balanced | 30 | 60 | fail_open |
| comment | Low Friction | 35 | 65 | fail_open |
| newsletter | Low Friction | 40 | 70 | fail_open |
Merge-Reihenfolge
Spätere Ebenen überschreiben frühere:
1. Globale Defaults (config: allow<30, challenge<60) 2. Site-Profil (z.B. "Auth Hardened" → allow<20, challenge<50) 3. Form-Policy (z.B. login → allow<15, fail_closed)
Integration (Entwickler)
Der form_type wird beim Widget-Einbau und beim Verify-Request angegeben:
<!-- Widget: form_type als data-Attribut --> <form data-captchacore="interactive" data-form-type="login"> <div data-captchacore-widget data-form-type="login"></div> </form> // Verify-Request: form_type im Body POST /api/v2/verify { "token": "...", "form_type": "login" // Steuert welche Policy angewendet wird }
Verfügbare Typen: login, register, contact, comment, checkout, password_reset, newsletter, custom. Ohne form_type werden die globalen Defaults verwendet.
Under-Attack-Mode
Bei einem Angriff (hohe Block-Rate) kann der Schutz verstärkt werden:
Automatische Aktivierung
Wenn über 70% aller Requests in einem 5-Minuten-Fenster blockiert werden, aktiviert sich der UAM automatisch.
# Konfigurierbar in den globalen Einstellungen uam.auto_threshold: 0.70 # 70% Block-Rate uam.window_minutes: 5 uam.auto_deactivate_after: 3600 # 1 Stunde uam.cookie_ttl_minutes: 30
Im UAM erhöht sich die PoW-Schwierigkeit um +1 Stufe. Verifizierte Besucher erhalten ein HMAC-signiertes Access-Cookie (HttpOnly, SameSite=Strict).