Detección
Cómo puntúa el motor de riesgo, cómo se aplican perfiles y políticas y qué ocurre bajo ataque.
Risk Engine adaptativa
El risk score es la suma ponderada de todas las penalizaciones (0-100). Los umbrales los determina el perfil de sitio activo y la política de formulario. La respuesta V2 incluye además un Confidence Score (0.0-1.0) y Reason Codes legibles por máquina.
| Score | Acción | Significado |
|---|---|---|
| 0-29 | allow | Humano, dejar pasar |
| 30-59 | challenge | Sospecha, se deja pasar pero se registra |
| 60-100 | block | Bot detectado, bloquear |
Factores de penalización
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
Señales adicionales que desenmascaran incluso navegadores headless camuflados. Todas las comprobaciones son sensibles al contexto: los dispositivos móviles y los navegadores centrados en la privacidad (Safari/Firefox) se reconocen correctamente como legítimos y no se marcan por error.
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 aumenta considerablemente la tasa de detección de frameworks stealth (Playwright Stealth, Puppeteer Stealth) sin afectar a los usuarios legítimos.
Perfiles de sitio y políticas de formulario
La Risk Engine V2 evalúa según el contexto: los formularios de inicio de sesión se evalúan con más rigor que los formularios de contacto. Los perfiles de sitio definen la postura base y las políticas de formulario la ajustan por tipo de formulario.
Perfiles de sitio (presets)
Cada sitio se asigna a un perfil. El perfil determina los umbrales, los tipos de challenge y las ponderaciones de comportamiento.
| Perfil | Allow < | Challenge < | Difficulty | Uso |
|---|---|---|---|---|
| Low Friction | 40 | 70 | 2 | Newsletter, comentarios, páginas informativas |
| Balanced | 30 | 60 | 4 | Estándar para la mayoría de los formularios |
| Auth Hardened | 20 | 50 | 5 | Login, registro, restablecimiento de contraseña |
| High Security | 15 | 40 | 6 | Checkout, acciones de administración, pago |
Políticas de formulario
Las políticas de formulario anulan el perfil de sitio para determinados tipos de formulario. El form_type se envía con la petición de verify.
| form_type | Perfil | Allow < | Challenge < | Modo de fallo |
|---|---|---|---|---|
| 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 |
Orden de fusión
Los niveles posteriores anulan los anteriores:
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)
Integración (desarrolladores)
El form_type se indica al integrar el widget y en la petición de verify:
<!-- 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 }
Tipos disponibles: login, register, contact, comment, checkout, password_reset, newsletter, custom. Sin form_type se usan los valores globales por defecto.
Under-Attack-Mode
Durante un ataque (tasa de bloqueo alta), la protección puede reforzarse:
Activación automática
Si más del 70% de todas las peticiones se bloquean en una ventana de 5 minutos, el UAM se activa automáticamente.
# 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
En el UAM la dificultad del PoW aumenta en +1 nivel. Los visitantes verificados reciben una cookie de acceso firmada con HMAC (HttpOnly, SameSite=Strict).