本文档介绍了如何在不集成 reCAPTCHA JavaScript(Web)或原生移动(iOS 或 Android)SDK 的情况下,在应用服务器上设置 reCAPTCHA WAF express protection (reCAPTCHA WAF Express)。
reCAPTCHA WAF Express 仅使用后端信号来生成 reCAPTCHA 风险得分。您可以使用此风险评分来决定是处理请求、重定向到挑战页面,还是记录下来以供日后分析。
准备工作
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
记录您的 Google Cloud 项目 ID,以备日后使用。启用 reCAPTCHA Enterprise API。
创建用于身份验证的 API 密钥:
在 Google Cloud 控制台中,转到凭据页面。
点击
创建凭据,然后选择 API 密钥。记录 API 密钥以供日后使用。
创建 reCAPTCHA WAF 极速密钥
如需实施 reCAPTCHA WAF express protection,请创建 reCAPTCHA WAF Express 密钥。
在 Google Cloud 控制台中,激活 Cloud Shell。
Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。
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": "", "wafFeature": "EXPRESS" } }
记录您的 Express 密钥以备日后使用。
创建评估
如需从应用服务器向 reCAPTCHA Enterprise 发出请求,请使用 projects.assessments.create
方法创建评估。
在使用任何请求数据之前,请先进行以下替换:
- API_KEY:您为身份验证创建的 API 密钥。
- EXPRESS_KEY:您为应用创建的 reCAPTCHA WAF Express 密钥。
- USER_IP_ADDRESS:用户设备发出的与此事件相关的请求中的 IP 地址。
- HEADER_INFO:可选。客户端发送至应用服务器的 HTTP 标头。
- JA3_FINGERPRINT:可选。JA3 是 TLS 客户端 Hello 数据包中某些字段的 MD5 指纹。如需了解详情,请参阅 JA3 - 一种用于分析 SSL/TLS 客户端的方法。
- URI_NAME:可选。用户正在访问的 URI。
- USER_AGENT:可选。与此事件相关的用户设备的请求中存在的用户代理。
HTTP 方法和网址:
POST https://public-preview-recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=API_KEY
请求 JSON 正文:
{ "event": { "siteKey": "EXPRESS_KEY", "express": true, "userIpAddress": "USER_IP_ADDRESS", "headers": ["HEADER_INFO"], "ja3": "JA3_FINGERPRINT", "requestedUri": "URI_NAME", "userAgent": "USER_AGENT", } }
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
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
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$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
您应该收到类似以下内容的 JSON 响应:
{ "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 }, "riskAnalysis": { "score": 0.7, "reasons": [] } }