Proteja uma rota com um desafio ALTCHA
Execute o desafio ALTCHA em um firewall e adicione a regra da aplicação que envia as requisições não verificadas para ele.
ALTCHA é uma alternativa de CAPTCHA open-source que mantém bots e spam fora de uma rota protegida. Ele responde a uma requisição com um desafio de prova de trabalho e é executado como uma função em um firewall. Uma regra na aplicação envia as requisições não verificadas para o desafio. Todos os passos são executados em Azion Console.
A função adiciona dois endpoints à aplicação. O endpoint /az-request-verify retorna a página do desafio e o endpoint /az-request-captcha valida a solução. Um navegador que resolve o desafio recebe um cookie de sessão, então as requisições seguintes passam sem um novo desafio.
ALTCHA é executado dentro da infraestrutura da Azion e não chama nenhum serviço de terceiros. Ele não coleta dados pessoais e o widget funciona com leitores de tela e outras tecnologias assistivas.
Para executar ALTCHA como destino de redirecionamento de Bot Manager, consulte Boas práticas de Firewall.
Pré-requisitos
- Uma conta Azion. Para criar uma, consulte Como criar uma conta na Azion.
- A função ALTCHA na sua conta. ALTCHA é uma integração do Azion Marketplace. Para instalá-la, consulte Como instalar uma integração.
- A permissão Edit Firewall na conta. Ela concede permissão para visualizar, criar, editar e remover um firewall, e também requer a permissão View Firewall.
- A permissão Edit Applications na conta. A regra de redirecionamento altera uma aplicação, e essa permissão também requer a permissão View Applications. Consulte Teams Permissions.
- Uma aplicação e a rota que o desafio protege. Os exemplos usam
/formcomo essa rota.
Crie o firewall
ALTCHA é executado em um firewall com o módulo Functions ativado. Para criar o firewall:
Acesse Azion Console > Firewall.
Digite um nome para o firewall. Por exemplo: altcha firewall.
O firewall é salvo e as abas Functions Instances e Rules Engine ficam disponíveis na mesma página.
Instancie a função ALTCHA
Uma instância de função vincula ALTCHA a um firewall e carrega a configuração dele. Para criar a instância:
No firewall que você criou, vá para a aba Functions Instances.
Digite um nome para a instância. Por exemplo: altcha instance.
Na lista de funções, selecione ALTCHA. A aba Arguments é carregada.
(Opcional) Na aba Arguments, digite a configuração em JSON. Todos os parâmetros são opcionais e a função usa o valor padrão de cada parâmetro que você omitir. Por exemplo:
Para cada parâmetro que a função aceita, consulte Parâmetros de configuração.
A instância aparece na aba Functions Instances. Ela não é executada até que uma regra do Rules Engine a selecione.
Adicione a regra do firewall que executa ALTCHA
Uma regra do Rules Engine define quando o firewall executa ALTCHA. Os critérios cobrem a rota protegida e os dois endpoints de ALTCHA. Para adicionar a regra:
No mesmo firewall, vá para a aba Rules Engine.
Digite um nome único e descritivo. Por exemplo: Run ALTCHA.
Na seção Criteria, compare a Request URI com /form, /az-request-verify e /az-request-captcha. Substitua /form pela rota que o desafio protege, como /api/submit.
Na seção Behavior, selecione Run Function e, em seguida, a instância de ALTCHA.
O firewall executa ALTCHA em toda requisição cuja URI corresponde aos critérios. As alterações podem levar alguns minutos para se propagar.
Adicione a regra da aplicação que inicia o desafio
A aplicação inicia o fluxo. Uma requisição para a rota protegida sem o header X-Azcaptcha-Success vai para /az-request-verify. Para adicionar a regra no Rules Engine da aplicação:
Em Azion Console, vá para Applications e selecione a aplicação que o desafio protege.
Digite um nome único e descritivo. Por exemplo: Start ALTCHA challenge.
Defina Phase como Request.
Na seção Criteria, selecione a variável ${http_X_Azcaptcha_Success} e o operador does not exist.
Selecione a variável ${uri}, o operador is equal e /form como valor.
Na seção Behavior, selecione Redirect To (302 Found) e digite /az-request-verify como destino.
Uma requisição para /form sem um cookie de sessão válido agora vai para a página do desafio ALTCHA. O fluxo de verificação começa ali.
Personalize a página do desafio
Por padrão, ALTCHA entrega uma página branca que contém o widget. Três parâmetros alteram essa página: custom_html substitui a página, captcha_colors define as cores do widget e captcha_localization define o texto dele.
Para substituir a página, defina custom_html na aba Arguments da instância:
Para exibir as mensagens do widget no idioma dos seus usuários, defina captcha_localization:
Parâmetros de configuração
A aba Arguments da instância recebe um objeto JSON. Todos os parâmetros são opcionais:
Cada parâmetro, o tipo dele e o valor padrão:
| Parâmetro | Tipo | Valor padrão | Descrição |
|---|---|---|---|
allowed_domains | Array de strings | ${host} | Define para quais domínios a função permite redirecionamentos. O host da aplicação e os redirecionamentos relativos são sempre permitidos. Em um valor inválido, a função ignora o parâmetro e registra um aviso em Real-Time Events |
captcha_colors | Objeto | Nenhum | Define as cores do widget ALTCHA |
captcha_colors.base | String | Definido por ALTCHA | Cor base do widget ALTCHA, no formato de tripleto hexadecimal |
captcha_colors.border | String | Definido por ALTCHA | Cor da borda do widget ALTCHA, no formato de tripleto hexadecimal |
captcha_colors.border_focus | String | Definido por ALTCHA | Cor da borda do widget ALTCHA enquanto ele está em foco, no formato de tripleto hexadecimal |
captcha_colors.error_text | String | Definido por ALTCHA | Cor das mensagens de erro do widget ALTCHA, no formato de tripleto hexadecimal |
captcha_colors.text | String | Definido por ALTCHA | Cor do texto do widget ALTCHA, no formato de tripleto hexadecimal |
captcha_localization | Objeto | Nenhum | Define as strings que o widget ALTCHA exibe |
captcha_localization.error | String | Definido por ALTCHA | Mensagem exibida quando ocorre um erro enquanto o usuário resolve o desafio |
captcha_localization.label | String | Definido por ALTCHA | Mensagem exibida ao lado da caixa de seleção que o usuário marca |
captcha_localization.verified | String | Definido por ALTCHA | Mensagem exibida depois que o widget identifica uma solução correta. O script redireciona o usuário quando a solução está correta, então a maioria dos usuários nunca a vê |
captcha_localization.verifying | String | Definido por ALTCHA | Mensagem exibida enquanto o script verifica a solução |
cookie_max_age | Integer | 86400 | Define a idade máxima do cookie de sessão. Um valor curto gera desafios frequentes e um valor longo reduz a segurança |
cookie_secret | String | @z10N!${FUNCTION_VERSION} | Chave secreta que assina o cookie de sessão |
custom_html | String | Uma página branca que contém o widget ALTCHA | Substitui o layout da página do desafio. A função insere o widget na tag {/* azion_captcha */} ou no final do corpo do HTML quando a tag não existe |
status_code | Integer | 200 | Define o código de status da resposta da página do desafio. Em um valor inválido, ou em um código de status que não permite corpo de resposta como 101, 204, 205 ou 304, a função usa 200 |
Headers de controle e cookies de sessão
ALTCHA define headers HTTP que carregam o estado da verificação. Use esses headers para depurar o fluxo e para orientar a lógica da sua aplicação.
| Header | Descrição |
|---|---|
X-Azcaptcha-Success: true | O usuário resolveu o desafio |
X-Azcaptcha-Violation: true | A função detectou uma tentativa de burlar o desafio |
ALTCHA também define dois cookies que guardam o estado da sessão de verificação.
| Cookie | Descrição |
|---|---|
az_${FUNCTION_VERSION}_verify_payload | Os dados brutos da solução do desafio |
az_${FUNCTION_VERSION}_verify_session | O cookie de sessão assinado que valida as requisições seguintes sem um novo desafio |
Monitore os logs da função em Real-Time Events para identificar tentativas de burlar o desafio e ajuste a configuração conforme os logs mostram.
Limitações
- HTTPS: ALTCHA usa a Web Crypto API e essa API funciona apenas sobre HTTPS.
- URLs completas: um parâmetro de redirecionamento carrega o esquema e o hostname.
- Endpoints reservados:
/az-request-verifye/az-request-captchaatendem apenas ALTCHA. A aplicação não deve usar uma URL que carregue qualquer um desses termos.