Este documento mostra como integrar o reCAPTCHA para WAF com o Google Cloud Armor em sites.
Para concluir a integração, implemente um ou mais recursos do reCAPTCHA para WAF e configure as políticas de segurança do Google Cloud Armor.
Antes de começar
Ative a API reCAPTCHA Enterprise.
Planeje como você quer implementar os recursos do reCAPTCHA para o WAF para proteger seu site.
- Escolher um ou mais recursos do WAF que melhor correspondem ao seu caso de uso.
- Identifique as páginas que você quer proteger e o tipo de recurso WAF que você quer implementar nessas páginas.
Implementar recursos do reCAPTCHA para WAF
Dependendo dos seus requisitos, é possível usar um ou mais recursos do reCAPTCHA para WAF em um único aplicativo.
Se você quiser usar mais de um recurso, crie uma chave reCAPTCHA para cada um deles e use-os no seu aplicativo. Por exemplo, se você quiser usar tokens de ação e a página de desafio reCAPTCHA, será preciso crie uma chave de token de ação e uma chave de página de desafio e use-as em seu para o aplicativo.
Implementar tokens de ação do reCAPTCHA
O reCAPTCHA precisa estar em execução nas suas páginas da Web para gerar tokens de ação.
Depois que o reCAPTCHA gera um token de ação, você o anexa a um
cabeçalho de solicitação sempre que você precisar proteger qualquer ação do usuário, como checkout
. Por padrão, os tokens de ação são válidos por 30 minutos, mas podem variar dependendo do tráfego.
É necessário anexar o token de ação a um cabeçalho de solicitação predefinido antes que o token expire. Assim, o Google Cloud Armor poderá avaliar os atributos do token.
Para implementar um token de ação reCAPTCHA, faça o seguinte:
Crie uma chave de token de ação para seu site.
console do Cloud
No console do Google Cloud, acesse a página reCAPTCHA.
Verifique se o nome do projeto aparece no seletor de recursos, na parte superior da página.
Se você não vir o nome do projeto, clique no seletor de recursos para selecioná-lo.
- Clique em Criar chave.
- No campo Nome de exibição, insira um nome de exibição para a chave.
- Dependendo da plataforma para a qual você quer criar chaves reCAPTCHA para WAF, realize a ação apropriada:
- No menu Escolher tipo de plataforma, selecione
Site.
A seção Lista de domínios é exibida.
-
Insira o nome do domínio do seu site:
- Na seção Lista de domínios, clique em Adicionar um domínio.
- No campo Domínio, digite o nome do seu domínio.
Opcional: para adicionar outro domínio, clique em Adicionar um domínio e digite o nome de outro domínio no campo Domínio. É possível adicionar até 250 domínios.
Para sites, a chave reCAPTCHA é exclusiva para os domínios e subdomínios especificados. É possível especificar mais de um domínio caso seu site seja veiculado em vários. Se você especificar um domínio (por exemplo,
examplepetstore.com
), não precisará especificar os subdomínios (por exemplo,subdomain.examplepetstore.com
).
- Expanda a seção Firewall de aplicativos da Web (WAF), verificação de domínio, páginas AMP e desafio.
- Ative a opção Firewall de aplicativos da Web (WAF).
No menu Feature, selecione Action token.
-
Opcional: ative a opção Usar desafio da caixa de seleção.
- Clique em Criar chave.
A chave recém-criada é listada na página Chaves reCAPTCHA.
gcloud
Para criar chaves reCAPTCHA, use o comando gcloud recaptcha keys create.
Antes de usar os dados do comando abaixo, faça estas substituições:
- DISPLAY_NAME: nome da chave. Geralmente, um nome de site.
- INTEGRATION_TYPE: tipo de integração.
Especifique
score
oucheckbox
. - DOMAIN_NAME: domínios ou subdomínios de sites que podem ser usados
a chave.
Para especificar vários domínios, use um formato de lista separada por vírgulas. Opcional: especifique
--allow-all-domains
para desativar a verificação de domínio.Desativar a verificação de domínio é um risco à segurança porque não há restrições no site para que a chave reCAPTCHA possa ser acessada e usada por qualquer pessoa.
- WAF_FEATURE: nome do recurso WAF.
Especifique
action-token
. - WAF_SERVICE: nome do
Provedor de serviços WAF.
Especifique
CA
para o Google Cloud Armor.
Execute o gcloud recaptcha keys create (link em inglês) comando:
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
A resposta contém a chave reCAPTCHA recém-criada.
REST
Para informações de referência da API sobre tipos de integração e chave, consulte Chave e Tipo de integração.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- DISPLAY_NAME: nome da chave. Geralmente, um nome de site.
- INTEGRATION_TYPE: tipo de integração.
Especifique
score
oucheckbox
. - DOMAIN_NAME: domínios ou subdomínios de sites que podem ser usados
a chave.
Para especificar vários domínios, use um formato de lista separada por vírgulas. Opcional: especifique
--allow-all-domains
para desativar a verificação de domínio.Desativar a verificação de domínio é um risco à segurança porque não há restrições no site para que a chave reCAPTCHA possa ser acessada e usada por qualquer pessoa.
- WAF_FEATURE: nome do recurso WAF.
Especifique
action-token
. - WAF_SERVICE: nome do provedor de serviço do WAF.
Especifique
CA
para o Google Cloud Armor.
Método HTTP e URL:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys
Corpo JSON da solicitação:
{ "displayName": "DISPLAY_NAME", 'wafSettings': " { "wafService": "WAF_SERVICE", "wafFeature": "WAF_FEATURE" } "webSettings": { "allowedDomains": "DOMAINS", "integrationType": "TYPE_OF_INTEGRATION" } }
Para enviar a solicitação, escolha uma destas opções:
curl
Salve o corpo da solicitação em um arquivo com o nome
request.json
e execute o comando a seguir: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
Salve o corpo da solicitação em um arquivo com o nome
request.json
e execute o comando a seguir:$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 ContentVocê receberá uma resposta JSON semelhante a esta:
{ "name": "projects/project-id/keys/7Ldqgs0UBBBBBIn4k7YxEB-LwEh5S9-Gv6QQIWB8m", "displayName": "DISPLAY_NAME, "webSettings": { "allowAllDomains": true, "allowedDomains": [ "localhost" ], "integrationType": "SCORE", }, "wafSettings": { "wafService": "CA", "wafFeature": "ACTION_TOKEN" } }
Integre o reCAPTCHA JavaScript nas suas páginas da Web com a chave de token de ação que você criou. Para instruções, consulte o documento que corresponde ao tipo de integração da chave do token de ação.
- Para o tipo de integração
SCORE
, consulte Integrar chaves baseadas em pontuação ao front-end. - Para o tipo de integração
CHECKBOX
, consulte Renderizar o widget reCAPTCHA no front-end.
- Para o tipo de integração
Depois de receber o token do reCAPTCHA, anexe-o ao um cabeçalho de solicitação predefinido neste formato:
X-Recaptcha-Token: value-of-your-action-token
É possível usar linguagens como XHR, Ajax ou API Fetch para anexar o token. a um cabeçalho de solicitação predefinido.
O exemplo de script a seguir mostra como proteger a ação
execute
e anexar o token a um cabeçalho de solicitação predefinido usando JavaScript + XHR:<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>
Implementar tokens de sessão do reCAPTCHA
O reCAPTCHA JavaScript define um token de sessão reCAPTCHA como um cookie no navegador do usuário final após a avaliação. O navegador do usuário final anexa o cookie e o atualiza enquanto o reCAPTCHA JavaScript permanece ativo.
Para fornecer um token de sessão como um cookie, instale uma chave de token de sessão em pelo menos uma das suas páginas da Web que atendam aos seguintes requisitos:
- A página da Web precisa ser aquela em que o usuário final navega antes da página que precisam ser protegidas. Por exemplo, se você quiser proteger a página de finalização da compra, instalar uma chave de token de sessão ou página do produto.
- A página da Web é protegida por uma política de segurança do Google Cloud Armor.
Você pode usar esse cookie para proteger as solicitações subsequentes do usuário final e é carregada em um domínio específico. Os tokens de sessão são válidos por 30 minutos padrão. No entanto, se o usuário final permanecer na página em que você implementou o token de sessão, o reCAPTCHA atualiza o token de sessão periodicamente para evitar que ele expire.
Instale tokens de sessão em cada página que precisa ser protegida pelo reCAPTCHA. Recomendamos proteger todas as páginas com o reCAPTCHA e usar as regras do Google Cloud Armor para proteger o acesso a todas elas, exceto à primeira página que os usuários finais forem acessar.
Veja a seguir um exemplo de token de sessão reCAPTCHA:recaptcha-ca-t=value-of-your-session-token;domain=domain;expires=expiration_time
Para implementar um token de sessão reCAPTCHA, faça o seguinte:
Crie uma chave de token de sessão para seu site.
console do Cloud
No console do Google Cloud, acesse a página reCAPTCHA.
Verifique se o nome do projeto aparece no seletor de recursos, na parte superior da página.
Se você não vir o nome do projeto, clique no seletor de recursos para selecioná-lo.
- Clique em Criar chave.
- No campo Nome de exibição, insira um nome de exibição para a chave.
- Dependendo da plataforma para a qual você quer criar chaves reCAPTCHA para WAF, realize a ação apropriada:
- No menu Escolher tipo de plataforma, selecione
Site.
A seção Lista de domínios é exibida.
-
Insira o nome do domínio do seu site:
- Na seção Lista de domínios, clique em Adicionar um domínio.
- No campo Domínio, digite o nome do seu domínio.
Opcional: para adicionar outro domínio, clique em Adicionar um domínio e digite o nome de outro domínio no campo Domínio. É possível adicionar até 250 domínios.
Para sites, a chave reCAPTCHA é exclusiva para os domínios e subdomínios especificados. É possível especificar mais de um domínio caso seu site seja veiculado em vários. Se você especificar um domínio (por exemplo,
examplepetstore.com
), não precisará especificar os subdomínios (por exemplo,subdomain.examplepetstore.com
).
- Expanda a seção Firewall de aplicativos da Web (WAF), verificação de domínio, páginas AMP e desafio.
- Ative a opção Firewall de aplicativos da Web (WAF).
No menu Feature, selecione Session token.
- Opcional:ative a opção Desativar a verificação de domínio.
Desativar a verificação de domínio é um risco para a segurança porque não há restrições no site. Portanto, sua chave reCAPTCHA pode ser acessada e usada por qualquer pessoa.
- Clique em Criar chave.
A chave recém-criada é listada na página Chaves reCAPTCHA.
gcloud
Para criar chaves reCAPTCHA, use o comando gcloud recaptcha keys create.
Antes de usar os dados do comando abaixo, faça estas substituições:
- DISPLAY_NAME: nome da chave. Geralmente, um nome de site.
- INTEGRATION_TYPE: tipo de integração.
Especifique
score
. - DOMAIN_NAME: domínios ou subdomínios de sites que podem usar
a chave.
Para especificar vários domínios, use um formato de lista separada por vírgulas. Opcional: especifique
--allow-all-domains
para desativar a verificação de domínio.Desativar a verificação de domínio é um risco à segurança porque não há restrições no site para que a chave reCAPTCHA possa ser acessada e usada por qualquer pessoa.
- WAF_FEATURE: nome do recurso WAF.
Especifique
session-token
. - WAF_SERVICE: nome do
Provedor de serviços WAF.
Especifique
CA
para o Google Cloud Armor.
Execute o comando 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
A resposta contém a chave reCAPTCHA recém-criada.
REST
Para informações de referência da API sobre tipos de integração e chave, consulte Chave e Tipo de integração.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- DISPLAY_NAME: nome da chave. Geralmente, um nome de site.
- INTEGRATION_TYPE: tipo de integração.
Especifique
score
. - DOMAIN_NAME: domínios ou subdomínios de sites que podem usar
a chave.
Para especificar vários domínios, use um formato de lista separada por vírgulas. Opcional: especifique
--allow-all-domains
para desativar a verificação de domínio.Desativar a verificação de domínio é um risco à segurança porque não há restrições no site para que a chave reCAPTCHA possa ser acessada e usada por qualquer pessoa.
- WAF_FEATURE: nome do recurso WAF.
Especifique
session-token
. - WAF_SERVICE: nome do
Provedor de serviços WAF.
Especifique
CA
para o Google Cloud Armor.
Método HTTP e URL:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys
Corpo JSON da solicitação:
{ "displayName": "DISPLAY_NAME", 'wafSettings': " { "wafService": "WAF_SERVICE", "wafFeature": "WAF_FEATURE" } "webSettings": { "allowedDomains": "DOMAINS", "integrationType": "TYPE_OF_INTEGRATION" } }
Para enviar a solicitação, escolha uma destas opções:
curl
Salve o corpo da solicitação em um arquivo com o nome
request.json
e execute o comando a seguir: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
Salve o corpo da solicitação em um arquivo com o nome
request.json
e execute o comando a seguir:$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 ContentVocê receberá uma resposta JSON semelhante a esta:
{ "name": "projects/project-id/keys/7Ldqgs0UBBBBBIn4k7YxEB-LwEh5S9-Gv6QQIWB8m", "displayName": "DISPLAY_NAME, "webSettings": { "allowAllDomains": true, "allowedDomains": [ "localhost" ], "integrationType": "SCORE", }, "wafSettings": { "wafService": "CA", "wafFeature": "SESSION_TOKEN" } }
Adicione a chave de token de sessão e
waf=session
ao JavaScript do reCAPTCHA.O exemplo de script a seguir mostra como implementar um token de sessão em uma página da Web:
<!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>
Implementar uma página de desafio reCAPTCHA
Quando você implementa uma página de teste do reCAPTCHA, o reCAPTCHA redireciona para uma página intersticial em que ele determina se é necessário mostrar um teste do CAPTCHA para um usuário. Portanto, os desafios CAPTCHA podem não ser visível para todos os usuários.
Para implementar uma página de desafio reCAPTCHA, crie uma chave da página de desafio para seu site.
console do Cloud
No console do Google Cloud, acesse a página do reCAPTCHA.
Verifique se o nome do projeto aparece no seletor de recursos, na parte superior da página.
Se você não vir o nome do projeto, clique no seletor de recursos para selecioná-lo.
- Clique em Criar chave.
- No campo Nome de exibição, insira um nome de exibição para a chave.
- Dependendo da plataforma para a qual você quer criar chaves reCAPTCHA para WAF, realize a ação apropriada:
- No menu Escolher tipo de plataforma, selecione Site.
- Expanda a seção Firewall de aplicativos da Web (WAF), verificação de domínio, páginas AMP e desafio.
- Ative a opção Firewall de aplicativos da Web (WAF).
No menu Recurso, selecione Página do desafio.
- Ative a opção Desativar verificação de domínio.
Quando você desativa a verificação de domínio para chaves de página de desafio, o Google Cloud Armor verifica o domínio.
- Clique em Criar chave.
A chave recém-criada é listada na página Chaves reCAPTCHA.
gcloud
Para criar chaves reCAPTCHA, use o comando gcloud recaptcha keys create.
Antes de usar os dados do comando abaixo, faça estas substituições:
- DISPLAY_NAME: nome da chave. Geralmente, um nome de site.
- INTEGRATION_TYPE: tipo de integração.
Especifique
invisible
. - DOMAIN_NAME: domínios ou subdomínios de sites que podem usar
a chave.
Especifique
--allow-all-domains
. - WAF_FEATURE: nome do recurso WAF.
Especifique
challenge-page
. - WAF_SERVICE: nome do provedor de serviço do WAF.
Especifique
CA
para o Google Cloud Armor.
Execute o comando 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
A resposta contém a chave reCAPTCHA recém-criada.
REST
Para informações de referência da API sobre tipos de integração e chave, consulte Chave e Tipo de integração.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
- DISPLAY_NAME: nome da chave. Geralmente, um nome de site.
- INTEGRATION_TYPE: tipo de integração.
Especifique
invisible
. - DOMAIN_NAME: domínios ou subdomínios de sites que podem usar
a chave.
Especifique
--allow-all-domains
. - WAF_FEATURE: nome do recurso WAF.
Especifique
challenge-page
. - WAF_SERVICE: nome do
Provedor de serviços WAF.
Especifique
CA
para o Google Cloud Armor.
Método HTTP e URL:
POST https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/keys
Corpo JSON da solicitação:
{ "displayName": "DISPLAY_NAME", 'wafSettings': " { "wafService": "WAF_SERVICE", "wafFeature": "WAF_FEATURE" } "webSettings": { "allowedDomains": "DOMAINS", "integrationType": "TYPE_OF_INTEGRATION" } }
Para enviar a solicitação, escolha uma destas opções:
curl
Salve o corpo da solicitação em um arquivo com o nome request.json
e execute o comando a seguir:
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
Salve o corpo da solicitação em um arquivo com o nome request.json
e execute o comando a seguir:
$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
Você receberá uma resposta JSON semelhante a esta:
{ "name": "projects/project-id/keys/7Ldqgs0UBBBBBIn4k7YxEB-LwEh5S9-Gv6QQIWB8m", "displayName": "DISPLAY_NAME, "webSettings": { "allowAllDomains": true, "allowedDomains": [ "localhost" ], "integrationType": "INVISIBLE", }, "wafSettings": { "wafService": "CA", "wafFeature": "CHALLENGE_PAGE" } }
Configurar políticas de segurança do Google Cloud Armor
Depois de implementar os recursos do reCAPTCHA para WAF, configure as políticas de segurança do Google Cloud Armor para gerenciamento de bots.
Se você implementou uma página de teste do reCAPTCHA, faça o seguinte:
- Associe a chave da página de desafio à sua política de segurança.
- Configurar uma regra de política de segurança para redirecionar uma solicitação para o reCAPTCHA avaliação.
Se você implementou tokens de ação ou de sessão do reCAPTCHA, configure uma regra de política de segurança que avalie os tokens do reCAPTCHA.
Antes de configurar as políticas de segurança do Google Cloud Armor, entenda os Atributos de token reCAPTCHA para o Google Cloud Armor.
Para saber como configurar políticas de segurança do Google Cloud Armor e usar as chaves reCAPTCHA para WAF com suas políticas de segurança, consulte Configurar regras para gerenciamento de bots.
A seguir
- Exemplos de integração com o Google Cloud Armor.
- Saiba como implementar recursos do reCAPTCHA WAF com o Google Cloud Armor.