将 reCAPTCHA for WAF 与 Cloudflare 集成

本文档介绍了如何将 reCAPTCHA for WAF 与 Cloudflare 集成。

如需完成集成,您必须实现 reCAPTCHA for WAF 的一项或多项功能,创建 reCAPTCHA 防火墙政策,并通过部署和配置 Cloudflare Worker 无服务器应用与 Cloudflare 集成。

准备工作

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

    记录您的 Google Cloud 项目 ID 以供日后使用。

  2. 确保您的 Google Cloud 项目已启用结算功能

  3. 启用 reCAPTCHA Enterprise API。

    启用 API

  4. 创建用于身份验证的 API 密钥:

    1. 在 Google Cloud 控制台中,前往凭据页面。

      进入“凭据”页面

    2. 点击 创建凭据,然后选择 API 密钥
    3. 记录 API 密钥以供日后使用。

  5. 规划您希望如何实现 reCAPTCHA for WAF 的功能,以保护您的网站。

    1. 选择一个或多个最适合您的用例的 WAF 功能
    2. 确定要保护的网页。
    3. 选择您要在指定页面上实现的 WAF 功能的类型。
    4. 确定管理用户访问权限的条件。
    5. 了解有助于您创建 reCAPTCHA 防火墙政策的 reCAPTCHA 防火墙政策组件及其属性。如需查看示例,请参阅 reCAPTCHA 防火墙政策示例
  6. 创建或选择具有 Cloudflare Worker 功能的 Cloudflare 帐号

  7. 创建或选择 Cloudflare 网站

  8. 下载适用于 Cloudflare 的 reCAPTCHA 软件包 recaptcha_cloudflare_client_0.0.2.tar.gz

实现 reCAPTCHA for WAF 的功能

根据您的要求,您可以在单个应用中使用 reCAPTCHA for WAF 的一项或多项功能。

如果您想使用多项功能,则必须为每个功能创建一个 reCAPTCHA 密钥,并在您的应用中使用。例如,如果您想使用 reCAPTCHA 操作令牌和 reCAPTCHA 验证页面,则必须创建操作令牌密钥和验证页面密钥,并在您的应用中使用它们。

操作令牌

您的网页必须运行 reCAPTCHA 才能生成操作令牌。 reCAPTCHA 生成操作令牌后,您可以在需要保护任何用户操作的位置将操作令牌附加到预定义的请求标头,例如 checkout。默认情况下,操作令牌的有效期为 30 分钟,但可能会因流量而异。您必须在令牌过期之前将操作令牌附加到预定义的请求标头,以便 cloudflare 可以评估令牌属性。

如需实现 reCAPTCHA 操作令牌,请执行以下操作:

  1. 为您的网站创建操作令牌密钥。

    gcloud

    如需创建 reCAPTCHA 密钥,请使用 gcloud recaptcha keys create 命令。

    在使用下面的命令数据之前,请先进行以下替换:

    • DISPLAY_NAME:密钥的名称。通常是网站名称。
    • INTEGRATION_TYPE:集成类型。 指定 scorecheckbox
    • DOMAIN_NAME:获准使用该密钥的网站的网域或子网域。

      以英文逗号分隔列表的形式指定多个网域。 可选:指定 --allow-all-domains 可停用域名验证。

      停用域名验证会带来安全风险,因为网站没有设置限制,所以任何人都可以访问和使用您的 reCAPTCHA 密钥。

    • WAF_FEATURE:WAF 功能的名称。指定 action-token
    • WAF_SERVICE:WAF 服务提供商的名称。为 cloudflare 指定 cloudflare

    执行 gcloud recaptcha keys create 命令:

    Linux、macOS 或 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
    
    

    响应中包含新创建的 reCAPTCHA 密钥。

    REST

    如需了解密钥类型和集成类型的 API 参考文档信息,请参阅密钥集成类型

    在使用任何请求数据之前,请先进行以下替换:

    • DISPLAY_NAME:密钥的名称。通常是网站名称。
    • INTEGRATION_TYPE:集成类型。 指定 scorecheckbox
    • DOMAIN_NAME:获准使用该密钥的网站的网域或子网域。

      以英文逗号分隔列表的形式指定多个网域。 可选:指定 --allow-all-domains 可停用域名验证。

      停用域名验证会带来安全风险,因为网站没有设置限制,所以任何人都可以访问和使用您的 reCAPTCHA 密钥。

    • WAF_FEATURE:WAF 功能的名称。指定 action-token
    • WAF_SERVICE:WAF 服务提供商的名称。为 cloudflare 指定 cloudflare

    HTTP 方法和网址:

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

    请求 JSON 正文:

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

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    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

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    $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

    您应该收到类似以下内容的 JSON 响应:

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

    记录您的操作令牌密钥以供日后使用。

  2. 将网页上的 reCAPTCHA JavaScript 与您创建的操作令牌密钥集成。有关说明,请参阅与您的操作令牌密钥的集成类型对应的文档。
  3. 从 reCAPTCHA 收到令牌后,请按以下格式将令牌附加到预定义的请求标头:
     X-Recaptcha-Token: value-of-your-action-token
    

    您可以使用 XHR、Ajax 或 Fetch API 等语言将令牌附加到预定义的请求标头。

    以下示例脚本展示了如何使用 JavaScript + XHR 保护 execute 操作并将令牌附加到预定义的请求标头:

      
      <script>
        src="https://www.google.com/recaptcha/enterprise.js?render=ACTION_TOKEN_KEY"></script>
    
        <script>
        function onSuccess(action_token) {
             const xhr = new XMLHttpRequest();
             xhr.open('GET','YOUR_URL', false);
             // Attach the action-token to the predefined request header
             xhr.setRequestHeader("X-Recaptcha-Token", action_token);
             xhr.send(null);
           }
           function onError(reason) {
             alert('Response promise rejected: ' + reason);
           grecaptcha.enterprise.ready(function () {
             document.getElementById("execute-button").onclick = () => {
               grecaptcha.enterprise.execute('ACTION_TOKEN_KEY', {
               }).then(onSuccess, onError);
             };
           });
          }
        </script>
      
      

会话令牌

评估之后,reCAPTCHA JavaScript 会将 reCAPTCHA 会话令牌设置为最终用户浏览器上的 Cookie。只要 reCAPTCHA JavaScript 保持活跃状态,最终用户的浏览器就会附加 Cookie 并刷新 Cookie。

要以 Cookie 的形式提供会话令牌,请在至少一个网页上安装会话令牌密钥,因为最终用户在浏览需要保护的网页之前浏览的网页。例如,如果您想保护结账页,请在首页或商品页上安装会话令牌密钥。

您可以在安装适用于 Cloudflare 的 reCAPTCHA 软件包时配置 wrangler.toml 文件,从而在网页上添加 reCAPTCHA JavaScript,也可以在网页上安装会话密钥。添加 Cloudflare 提供的 reCAPTCHA JavaScript 后,您可以使用会话令牌密钥集成 reCAPTCHA,而无需在网页上手动安装密钥。

您可以使用此 Cookie 保护最终用户在特定网域上的后续请求和网页加载。默认情况下,会话令牌的有效期为 30 分钟。但是,如果最终用户停留在您实现了会话令牌的网页上,reCAPTCHA 会定期刷新会话令牌,以防其过期。

在需要受 reCAPTCHA 保护的每个页面上安装会话令牌。我们建议您使用 reCAPTCHA 保护每个页面,并使用 Google Cloud Armor 规则强制对所有页面(最终用户浏览的第一个页面除外)进行访问。

以下是 reCAPTCHA 会话令牌示例:
   recaptcha-ca-t=value-of-your-session-token;domain=domain;expires=expiration_time

如需实现 reCAPTCHA 会话令牌,请执行以下操作:

  1. 为您的网站创建会话令牌密钥。

    gcloud

    如需创建 reCAPTCHA 密钥,请使用 gcloud recaptcha keys create 命令。

    在使用下面的命令数据之前,请先进行以下替换:

    • DISPLAY_NAME:密钥的名称。通常是网站名称。
    • INTEGRATION_TYPE:集成类型。 指定 score
    • DOMAIN_NAME:获准使用该密钥的网站的网域或子网域。

      以英文逗号分隔列表的形式指定多个网域。 可选:指定 --allow-all-domains 可停用域名验证。

      停用域名验证会带来安全风险,因为网站没有设置限制,所以任何人都可以访问和使用您的 reCAPTCHA 密钥。

    • WAF_FEATURE:WAF 功能的名称。指定 session-token
    • WAF_SERVICE:WAF 服务提供商的名称。为 cloudflare 指定 cloudflare

    执行 gcloud recaptcha keys create 命令:

    Linux、macOS 或 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
    
    

    响应中包含新创建的 reCAPTCHA 密钥。

    REST

    如需了解密钥类型和集成类型的 API 参考文档信息,请参阅密钥集成类型

    在使用任何请求数据之前,请先进行以下替换:

    • DISPLAY_NAME:密钥的名称。通常是网站名称。
    • INTEGRATION_TYPE:集成类型。 指定 score
    • DOMAIN_NAME:获准使用该密钥的网站的网域或子网域。

      以英文逗号分隔列表的形式指定多个网域。 可选:指定 --allow-all-domains 可停用域名验证。

      停用域名验证会带来安全风险,因为网站没有设置限制,所以任何人都可以访问和使用您的 reCAPTCHA 密钥。

    • WAF_FEATURE:WAF 功能的名称。指定 session-token
    • WAF_SERVICE:WAF 服务提供商的名称。为 cloudflare 指定 cloudflare

    HTTP 方法和网址:

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

    请求 JSON 正文:

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

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    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

    将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

    $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

    您应该收到类似以下内容的 JSON 响应:

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

    记录您的会话令牌密钥以供日后使用。

    如果要从 Cloudflare 注入 reCAPTCHA JavaScript,请跳过下一步并配置 wranger.toml

  2. 将会话令牌密钥和 waf=session 添加到 reCAPTCHA JavaScript。

    以下示例脚本展示了如何在网页上实现会话令牌:

    
    <!DOCTYPE html>
    <html lang="en">
    <head>
     <meta charset="UTF-8">
     <title>reCAPTCHA WAF Session Token</title>
     <script src="https://www.google.com/recaptcha/enterprise.js?render=SESSION_TOKEN_KEY&waf=session" async defer></script>
     <body></body>
    </head>
    </html>
    
    
    

challenge-page

When you implement a reCAPTCHA challenge page, reCAPTCHA redirects to an interstitial page where it determines if it's necessary to show a CAPTCHA challenge to a user. Therefore, CAPTCHA challenges might not be visible to all users.

To implement a reCAPTCHA challenge page, do the following:

  1. Create a challenge-page key for your website.

    gcloud

    To create reCAPTCHA keys, use the gcloud recaptcha keys create command.

    Before using any of the command data below, make the following replacements:

    • DISPLAY_NAME: Name for the key. Typically a site name.
    • INTEGRATION_TYPE: Type of integration. Specify invisible.
    • DOMAIN_NAME: Domains or subdomains of websites allowed to use the key. Specify --allow-all-domains.
    • WAF_FEATURE: Name of the WAF feature. Specify challenge-page.
    • WAF_SERVICE: Name of the WAF service provider. Specify cloudflare for cloudflare.

    Execute the gcloud recaptcha keys create command:

    Linux, macOS, or 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
    
    

    响应中包含新创建的 reCAPTCHA 密钥。

REST

如需了解密钥类型和集成类型的 API 参考文档信息,请参阅密钥集成类型

在使用任何请求数据之前,请先进行以下替换:

  • DISPLAY_NAME:密钥的名称。通常是网站名称。
  • INTEGRATION_TYPE:集成类型。 指定 invisible
  • DOMAIN_NAME:获准使用该密钥的网站的网域或子网域。 指定 --allow-all-domains
  • WAF_FEATURE:WAF 功能的名称。指定 challenge-page
  • WAF_SERVICE:WAF 服务提供商的名称。为 cloudflare 指定 cloudflare

HTTP 方法和网址:

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

请求 JSON 正文:


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

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

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

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$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

您应该收到类似以下内容的 JSON 响应:


{
  "name": "projects/project-id/keys/7Ldqgs0UBBBBBIn4k7YxEB-LwEh5S9-Gv6QQIWB8m",
"displayName": "DISPLAY_NAME,
"webSettings": {
  "allowAllDomains": true,
  "allowedDomains": [
    "localhost"
  ],

  "integrationType": "INVISIBLE",
 
},
"wafSettings": {
  "wafService": "cloudflare",
  "wafFeature": "CHALLENGE_PAGE"
  
}
}

记录您的挑战页面密钥供稍后使用。

  • 如需将用户重定向到 reCAPTCHA 验证页面并接收 reCAPTCHA 令牌,请在受保护的页面上创建防火墙政策,并在其中执行 redirect 操作。
  • 快递

    如需实现 reCAPTCHA WAF express protection,请创建极速密钥。

    1. 在 Google Cloud 控制台中,激活 Cloud Shell。

      激活 Cloud Shell

      Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

    2. gcloud

      如需创建 reCAPTCHA 密钥,请使用 gcloud recaptcha keys create 命令。

      在使用下面的命令数据之前,请先进行以下替换:

      • DISPLAY_NAME:密钥的名称。通常是网站名称。
      • INTEGRATION_TYPE:集成类型。 指定 score
      • DOMAIN_NAME:获准使用该密钥的网站的网域或子网域。 指定 --allow-all-domains
      • WAF_FEATURE:WAF 功能的名称。指定 express
      • WAF_SERVICE:WAF 服务提供商的名称。

      执行 gcloud recaptcha keys create 命令:

      Linux、macOS 或 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
      
      

      响应中包含新创建的 reCAPTCHA 密钥。

      REST

      如需了解密钥类型和集成类型的 API 参考文档信息,请参阅密钥集成类型

      在使用任何请求数据之前,请先进行以下替换:

      • DISPLAY_NAME:密钥的名称。通常是网站名称。
      • INTEGRATION_TYPE:集成类型。 指定 score
      • DOMAIN_NAME:获准使用该密钥的网站的网域或子网域。 指定 --allow-all-domains
      • WAF_FEATURE:WAF 功能的名称。指定 express
      • WAF_SERVICE:WAF 服务提供商的名称。

      HTTP 方法和网址:

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

      请求 JSON 正文:

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

      如需发送请求,请选择以下方式之一:

      curl

      将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

      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

      将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

      $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

      您应该收到类似以下内容的 JSON 响应:

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

      请录制您的极速密钥以供日后使用。

    与 Cloudflare 集成

    如需使用 reCAPTCHA 防火墙政策,您必须部署和配置 Cloudflare Worker 无服务器应用。

    在开始集成流程之前,请执行以下操作:

    1. 创建一个 CLOUDFLARE_API_TOKEN,然后选择 Edit Cloudflare Workers 模板。记录 API 令牌以供日后使用。

    2. 获取您的 Cloudflare API 帐号 ID 并将其记录下来,以供日后使用。

    安装适用于 Cloudflare 的 reCAPTCHA 软件包

    1. 下载并安装适用于 Cloudflare 的 reCAPTCHA 软件包:

      1. 在 Google Cloud 控制台中,激活 Cloud Shell。

        激活 Cloud Shell

        Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

      2. 安装 wrangler 软件包:

         npm install -g wrangler
        
      3. 下载适用于 Cloudflare 的 reCAPTCHA 软件包:

        wget --load-cookies /tmp/cookies.txt https://dl.google.com/recaptchaenterprise/cloudflare_client/releases/recaptcha_cloudflare_client_0.0.2.tar.gz -O recaptcha_cloudflare_client_0.0.2.tar.gz && rm -rf /tmp/cookies.txt
        
      4. 解压缩适用于 Cloudflare 的 reCAPTCHA 软件包:

        tar -xvzf recaptcha_cloudflare_client_0.0.2.tar.gz
        
    2. wrangler.toml 文件的 vars 部分中配置以下变量:

      • GCP_API_KEY:您为身份验证创建的 Google Cloud API 密钥。
      • GCP_PROJECT_NUMBER:您的 Google Cloud 项目编号。
      • RECAPTCHA_EXPRESS_SITE_KEY:如果您使用 reCAPTCHA WAF express protection,则为极速密钥。
      • RECAPTCHA_SESSION_SITE_KEY:会话令牌密钥(如果您使用的是 reCAPTCHA 会话令牌)。
      • RECAPTCHA_ACTION_SITE_KEY:操作令牌密钥(如果您使用的是 reCAPTCHA action-token)。
      • RECAPTCHA_CHALLENGE_SITE_KEY:如果您正在使用 reCAPTCHA 验证页面,则为验证页密钥。
      • RECAPTCHA_JS_INSTALL:您希望 Cloudflare 工作器使用会话令牌密钥安装 reCAPTCHA JavaScript 的网页的网址。将路径指定为 glob 模式,并使用 ; 作为分隔符。此选项仅适用于 reCAPTCHA 会话令牌。
      • RECAPTCHA_ASSESSMENT_CALL:您希望 Cloudflare 工作器在其中调用 reCAPTCHA API 以评估 reCAPTCHA 得分并执行防火墙政策中配置的操作的网页的网址。将路径指定为 glob 模式,并使用 ; 作为分隔符。

    3. 部署应用:

      wrangler deploy
      

    配置到工作器应用的 Cloudflare 路由

    1. 登录 Cloudflare 信息中心并选择您的帐号。
    2. 在导航菜单中,点击工作器和页面,然后选择您的工作器应用。
    3. 点击触发器标签页,然后点击添加路由
    4. 添加路由对话框中,输入需要由 reCAPTCHA 保护的网页的路径,选择相应的可用区,然后点击添加路由

    创建 reCAPTCHA 防火墙政策

    您必须创建一项防火墙政策,为要在网站上保护的每个网页指定规则。您可以使用 reCAPTCHA for WAF 的一项或多项功能创建防火墙政策。

    在 reCAPTCHA 防火墙政策中,按照预期优先级的顺序添加规则。第一条规则的顺序最高。您还可以使用 ReorderFirewallPoliciesRequest 对优先级进行重新排序。对于传入的请求,当政策条件与指定路径匹配时,您的 WAF 服务提供商会实现定义的操作,并且不会评估后续规则。

    1. 根据您选择的功能,执行以下操作:
      • 确定要保护的路径。
      • 确定允许、重定向或禁止访问的条件。
      • 确定规则的优先次序。
    2. 了解防火墙政策组件及其属性
    3. 在 Google Cloud 控制台中,激活 Cloud Shell。

      激活 Cloud Shell

      Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

    4. 如需替换 gcloud CLI 以访问 reCAPTCHA API 的公开预览版,请运行以下命令:
          gcloud config set api_endpoint_overrides/recaptchaenterprise https://public-preview-recaptchaenterprise.googleapis.com/
          
    5. 如需创建 reCAPTCHA 防火墙政策,请使用 gcloud recaptcha fire-policies create 命令:

      在 reCAPTCHA 防火墙政策中,按照预期优先级添加规则。您必须先添加优先级最高的规则。对于传入的请求,当政策条件与指定路径匹配时,您的 WAF 服务提供商会实现定义的操作,并且不会评估后续规则。默认规则是允许访问。

         gcloud recaptcha firewall-policies create \
            --actions=ACTION \
            --condition=CONDITION \
            --description=DESCRIPTION \
            --path=PATH
      
        

      请提供以下值:

      • ACTION:您的 WAF 服务提供商必须针对传入请求执行的操作。它最多只能包含一项终端操作,也就是强制执行响应的操作。 指定以下操作之一:
        • allow:允许访问请求的网页。这是一项终端操作。
        • block:拒绝访问请求的网页。这是一项终端操作。
        • redirect:将传入的用户请求重定向到 reCAPTCHA 验证页面。这是一项终端操作。
        • substitute:针对欺诈性用户请求提供所请求的页面以外的页面。这是一项终端操作。
        • set_header:设置自定义标头,并允许传入的用户请求继续发送到后端。然后,后端可以触发自定义的保护。这是一项非终止操作。
      • CONDITIONCEL(通用表达式语言)条件表达式,用于指定 reCAPTCHA 防火墙政策是否应用于传入的用户请求。如果此条件的计算结果为 true,并且请求的路径与路径模式匹配,则 WAF 服务提供商执行关联的操作。在创建条件字符串时,系统会检查 CEL 语法是否正确。如需详细了解语言定义,请参阅 CEL 语言定义
      • DESCRIPTION:reCAPTCHA 防火墙政策旨在实现的目标。说明不得超过 256 个 UTF-8 字符。
      • PATH:应用 reCAPTCHA 防火墙政策的路径。必须以 glob 模式指定。如需详细了解 glob,请参阅手册页面

      成功执行此命令后,系统将显示类似于以下内容的输出:

           Created [100].
         

      以下示例会创建 reCAPTCHA 防火墙政策,以在得分小于 0.1 时阻止针对“/example/page.html”的流量定位。

         gcloud recaptcha firewall-policies create \
           --description="example policy" \
           --path="/example/page.html" \
           --condition="recaptcha.score < 0.1" \
           --actions="block"
         

    后续步骤