Configura la protección exprés de reCAPTCHA WAF

En este documento, se muestra cómo configurar la protección exprés de reCAPTCHA WAF (reCAPTCHA WAF Express) en un servidor de aplicaciones sin integrar el SDK de reCAPTCHA (Web) ni los SDK nativos para dispositivos móviles (iOS o Android).

reCAPTCHA WAF Express solo usa indicadores de backend para generar una puntuación de riesgo de reCAPTCHA. Puedes usar esta puntuación de riesgo para decidir si entregar la solicitud, redireccionar a una página de desafío o registrarla para su análisis posterior.

Antes de comenzar

  1. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

    Registra tu ID del proyecto de Google Cloud para usarlo más adelante.

  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  3. Habilita la API de reCAPTCHA Enterprise.

    Habilita la API

  4. Crea una clave de API para la autenticación:

    1. En la consola de Google Cloud, ve a la página Credenciales.

      Ir a Credenciales

    2. Haz clic en Crear credenciales y selecciona Clave de API.

    3. Registra la clave de API para usarla más adelante.

Crear clave exprés WAF de reCAPTCHA

Para implementar la protección exprés de reCAPTCHA WAF, crea una clave exprés de reCAPTCHA WAF.

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. gcloud

    Para crear claves de reCAPTCHA, usa el comando gcloud recaptcha keys create.

    Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

    • DISPLAY_NAME: Es el nombre de la clave. Por lo general, es un nombre de sitio.
    • INTEGRATION_TYPE: Tipo de integración. Especifica score.
    • DOMAIN_NAME: Son dominios o subdominios de sitios web que pueden usar la clave. Especifica --allow-all-domains.
    • WAF_FEATURE: Nombre de la función de WAF. Especifica express.
    • WAF_SERVICE: Nombre del proveedor de servicios de WAF.

    Ejecuta el comando gcloud recaptcha keys create:

    Linux, macOS o Cloud Shell

    
    gcloud recaptcha keys create \
    --web \
    --display-name=DISPLAY_NAME  \
    --integration-type=INTEGRATION_TYPE \
    --domains=DOMAIN_NAME \
    --waf-feature=WAF_FEATURE \
    --waf-service=WAF_SERVICE
    
    

    Windows (PowerShell)

    
    gcloud recaptcha keys create `
    --web `
    --display-name=DISPLAY_NAME  `
    --integration-type=INTEGRATION_TYPE `
    --domains=DOMAIN_NAME `
    --waf-feature=WAF_FEATURE `
    --waf-service=WAF_SERVICE
    
    

    Windows (cmd.exe)

    
    gcloud recaptcha keys create ^
    --web ^
    --display-name=DISPLAY_NAME  ^
    --integration-type=INTEGRATION_TYPE ^
    --domains=DOMAIN_NAME ^
    --waf-feature=WAF_FEATURE ^
    --waf-service=WAF_SERVICE
    
    

    La respuesta contiene la clave de reCAPTCHA recién creada.

    REST

    Para obtener información de referencia de la API sobre tipos de claves y tipos de integración, consulta Clave y Tipo de integración.

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • DISPLAY_NAME: Es el nombre de la clave. Por lo general, es un nombre de sitio.
    • INTEGRATION_TYPE: Tipo de integración. Especifica score.
    • DOMAIN_NAME: Son dominios o subdominios de sitios web que pueden usar la clave. Especifica --allow-all-domains.
    • WAF_FEATURE: Nombre de la función de WAF. Especifica express.
    • WAF_SERVICE: Nombre del proveedor de servicios de WAF.

    Método HTTP y URL:

    POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys

    Cuerpo JSON de la solicitud:

    
    {
      "displayName": "DISPLAY_NAME",
       'wafSettings': "  {
           "wafService": "WAF_SERVICE",
    "wafFeature": "WAF_FEATURE"
      }
      "webSettings": {
        "allowedDomains": "DOMAINS",
        "integrationType": "TYPE_OF_INTEGRATION"
       }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys" | Select-Object -Expand Content

    Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

    
    {
      "name": "projects/project-id/keys/7Ldqgs0UBBBBBIn4k7YxEB-LwEh5S9-Gv6QQIWB8m",
    "displayName": "DISPLAY_NAME,
    "webSettings": {
      "allowAllDomains": true,
      "allowedDomains": [
        "localhost"
      ],
    
     "integrationType": "SCORE",
    
    },
    "wafSettings": {
      "wafService": "",
      "wafFeature": "EXPRESS"
    
    }
    }
    
    

Graba tu clave exprés para usarla más adelante.

Crea una evaluación

Para realizar una solicitud del servidor de aplicaciones a reCAPTCHA Enterprise, crea una evaluación con el método projects.assessments.create.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • API_KEY: Es la clave de API que creaste para la autenticación.
  • EXPRESS_KEY: Es la clave exprés de reCAPTCHA WAF que creaste para tu aplicación.
  • USER_IP_ADDRESS: Es la dirección IP en la solicitud del dispositivo del usuario relacionada con este evento.
  • HEADER_INFO: Opcional Los encabezados HTTP que el cliente envió al servidor de tu aplicación.
  • JA3_FINGERPRINT: Opcional JA3 es una huella digital MD5 de ciertos campos del paquete hello del cliente de TLS. Si quieres obtener más información, consulta JA3: Un método para generar perfiles de clientes SSL/TLS.
  • URI_NAME: Opcional El URI al que accede el usuario.
  • USER_AGENT: Opcional El usuario-agente que está presente en la solicitud del dispositivo del usuario relacionada con este evento.
  • ACCOUNT_ID: Opcional Es un identificador único y persistente para la cuenta del usuario, como un nombre de cuenta con codificación hash.

Método HTTP y URL:

POST https://public-preview-recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=API_KEY

Cuerpo JSON de la solicitud:


{
  "event": {
    "siteKey": "EXPRESS_KEY",
    "express": true,
    "userIpAddress": "USER_IP_ADDRESS",
    "headers": ["HEADER_INFO"],
    "ja3": "JA3_FINGERPRINT",
    "requestedUri": "URI_NAME",
    "userAgent": "USER_AGENT",
    "user_info": {
      "account_id": "ACCOUNT_ID"
    }
  }
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://public-preview-recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=API_KEY"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$headers = @{  }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://public-preview-recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=API_KEY" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "name": "projects/123456789/assessments/abcdef1234000000",
  "event": {
    "token": "",
    "siteKey": "6L...",
    "userAgent": "Mozilla/5.0 (X11; CrOS x86_64 13816.55.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.86 Safari/537.36",
    "userIpAddress": "1.2.3.4",
    "express": true,
    "requestedUri": "https://example.com/",
    "firewallPolicyEvaluation": false,
    "user_info": {
      "account_id": "123456789"
    }
  },
  "riskAnalysis": {
    "score": 0.7,
    "reasons": []
  }
}

¿Qué sigue?