TLDR: Integração do Servidor ALTCHA
Este guia oferece uma visão geral concisa de como integrar o ALTCHA no seu servidor, cobrindo ambos os modos: com e sem o filtro de spam. Seguindo esses passos, você garantirá uma verificação segura e eficiente das submissões do usuário, seja para uma verificação de desafio básica ou para um filtro avançado de spam.
Para uma integração fácil, considere usar as bibliotecas oficiais:
Visão Geral da Configuração
-
Recuperar Desafio:
- O cliente busca um desafio usando o widget ALTCHA.
-
Resolver Desafio:
- O cliente resolve o desafio.
-
Enviar Solução:
- Solução e dados do usuário são enviados para o servidor.
-
Verificação no Servidor:
- O servidor valida a solução e, se estiver usando o filtro de spam, valida a classificação de spam.
Sem Filtro de Spam
Documentação completa: Integração do Servidor
Criando um Desafio (Lado do Servidor)
- Gerar Parâmetros:
maxnumber
: Número máximo aleatório (ajusta a dificuldade).salt
: String aleatória (≥10 caracteres).secret_number
: Inteiro aleatório (0…maxnumber).challenge
: Hash SHA-256 desalt + secret_number
.signature
: HMAC-SHA-256 dechallenge
com uma chave secreta.
Validando uma Solução (Lado do Servidor)
-
Decodificar Payload:
- Extrair
algorithm
,challenge
,number
,salt
,signature
do payload Base64-JSON.
- Extrair
-
Passos de Validação:
alg_ok
: Verificar se o algoritmo é ‘SHA-256’.challenge_ok
: Verificar se ochallenge
coincide comsha2_hex(concat(salt, number))
.signature_ok
: Verificar se asignature
coincide comhmac_sha2_hex(challenge, hmac_key)
.
Com Filtro de Spam
Documentação completa: Integração do Servidor
Usando a API com o Widget
- Configuração do Widget:
- Defina
challengeurl
com sua chave de API. - Ative
spamfilter
para classificação de spam.
- Defina
Verificação no Servidor
- Formato do Payload:
- Você recebe um objeto JSON codificado em base64 com as propriedades
algorithm
,signature
,verificationData
everified
.
- Você recebe um objeto JSON codificado em base64 com as propriedades
Verificando a Assinatura
- Calcule o hash SHA de
verificationData
. - Compute a assinatura HMAC usando a parte secreta da sua chave de API.
Exemplo de pseudo-código:
- Verificação:
- O payload é verificado se a assinatura calculada coincidir com a propriedade
signature
.
- O payload é verificado se a assinatura calculada coincidir com a propriedade
Verificar Campos (Filtro de Spam)
- Verificar
fields
efieldsHash
:- Concatene os valores dos campos com
\n
e calcule a hash SHA.
- Concatene os valores dos campos com
Exemplo de pseudo-código:
- Validação:
- Os dados estão corretos se a hash calculada coincidir com
fieldsHash
.
- Os dados estão corretos se a hash calculada coincidir com
Código de Exemplo
- Exemplo em Node.js:
Recomendações de Segurança
-
Prevenir Ataques de Replay:
- Invalide desafios previamente resolvidos.
-
Expiração do Desafio:
- Inclua um carimbo de hora no
salt
para limitar o período de validade. - Use
salt = '<random_salt>?expires=<unix_ts>'
.
- Inclua um carimbo de hora no
Pontos de Extensão da API
-
Criar um Novo Desafio:
GET /api/v1/challenge
-
Verificar Solução:
POST /api/v1/challenge/verify
-
Validar Assinatura do Servidor:
POST /api/v1/challenge/verify_server_signature