Configurer la protection express reCAPTCHA Enterprise WAF

Ce document explique comment configurer la protection express reCAPTCHA Enterprise WAF (reCAPTCHA WAF Express) sur un serveur d'applications sans intégrer les SDK reCAPTCHA JavaScript (Web) ou les SDK natifs pour mobile (iOS ou Android).

reCAPTCHA WAF Express n'utilise que des signaux de backend pour générer un score de risque reCAPTCHA. Vous pouvez utiliser ce score de risque pour décider s'il faut diffuser la requête, rediriger vers une page de test ou l'enregistrer en vue d'une analyse ultérieure.

Avant de commencer

  1. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

    Enregistrez l'ID de votre projet Google Cloud pour une utilisation ultérieure.

  2. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  3. Activez l'API reCAPTCHA Enterprise

    Activer l'API

  4. Créez une clé API pour l'authentification:

    1. Dans la console Google Cloud, accédez à la page Identifiants.

      Accéder à "Identifiants"

    2. Cliquez sur  Créer des identifiants, puis sélectionnez Clé API.

    3. Enregistrez la clé API pour une utilisation ultérieure.

Créer une clé express reCAPTCHA WAF

Pour implémenter la protection express reCAPTCHA Enterprise WAF, créez une clé Express WAF reCAPTCHA.

  1. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

    En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

  2. gcloud

    Pour créer des clés reCAPTCHA, utilisez la commande gcloud recaptcha keys create.

    Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

    • DISPLAY_NAME: nom de la clé. Généralement un nom de site.
    • INTEGRATION_TYPE: type d'intégration. Spécifiez score.
    • DOMAIN_NAME: domaines ou sous-domaines de sites Web autorisés à utiliser la clé. Spécifiez --allow-all-domains.
    • WAF_FEATURE: nom de la fonctionnalité WAF. Spécifiez express.
    • WAF_SERVICE: nom du fournisseur de services WAF.

    Exécutez la commande gcloud recaptcha keys create:

    Linux, macOS ou 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 réponse contient la clé reCAPTCHA que vous venez de créer.

    REST

    Pour obtenir des informations de référence sur les types de clés et les types d'intégration, consultez les sections Clé et Type d'intégration.

    Avant d'utiliser les données de requête, effectuez les remplacements suivants:

    • DISPLAY_NAME: nom de la clé. Généralement un nom de site.
    • INTEGRATION_TYPE: type d'intégration. Spécifiez score.
    • DOMAIN_NAME: domaines ou sous-domaines de sites Web autorisés à utiliser la clé. Spécifiez --allow-all-domains.
    • WAF_FEATURE: nom de la fonctionnalité WAF. Spécifiez express.
    • WAF_SERVICE: nom du fournisseur de services WAF.

    Méthode HTTP et URL :

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

    Corps JSON de la requête :

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

    Pour envoyer votre requête, choisissez l'une des options suivantes :

    curl

    Enregistrez le corps de la requête dans un fichier nommé request.json et exécutez la commande suivante:

    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

    Enregistrez le corps de la requête dans un fichier nommé request.json et exécutez la commande suivante:

    $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

    Vous devriez recevoir une réponse JSON de ce type :

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

Enregistrez votre clé express pour une utilisation ultérieure.

Créer une évaluation

Pour envoyer une requête de votre serveur d'application à reCAPTCHA Enterprise, créez une évaluation à l'aide de la méthode projects.assessments.create.

Avant d'utiliser les données de requête, effectuez les remplacements suivants:

  • API_KEY: clé API que vous avez créée pour l'authentification.
  • EXPRESS_KEY: clé express reCAPTCHA WAF que vous avez créée pour votre application.
  • USER_IP_ADDRESS: adresse IP dans la requête de l'appareil de l'utilisateur associée à cet événement.
  • HEADER_INFO : facultatif. En-têtes HTTP que le client a envoyés à votre serveur d'applications.
  • JA3_FINGERPRINT : facultatif. JA3 est une empreinte MD5 de certains champs du paquet hello du client TLS. Pour en savoir plus, consultez la page JA3 : Méthode de profilage des clients SSL/TLS.
  • URI_NAME : facultatif. URI auquel l'utilisateur accède.
  • USER_AGENT : facultatif. User-agent présent dans la requête de l'appareil de l'utilisateur associé à cet événement.
  • ACCOUNT_ID : facultatif. Identifiant unique et persistant du compte de l'utilisateur, tel qu'un nom de compte haché.

Méthode HTTP et URL :

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

Corps JSON de la requête :


{
  "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"
    }
  }
}

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json et exécutez la commande suivante:

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

Enregistrez le corps de la requête dans un fichier nommé request.json et exécutez la commande suivante:

$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

Vous devriez recevoir une réponse JSON de ce type :

{
  "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": []
  }
}

Étapes suivantes