TLDR: Integración del Servidor ALTCHA
Esta guía ofrece una descripción concisa de cómo integrar ALTCHA en tu servidor, cubriendo ambos modos: con y sin el filtro de spam. Siguiendo estos pasos, garantizarás una verificación segura y eficiente de las presentaciones de los usuarios, ya sea que necesites verificación básica de desafíos o filtrado avanzado de spam.
Para una integración fácil, considera usar las bibliotecas oficiales:
Resumen de Configuración
-
Obtener Desafío:
- El cliente obtiene un desafío usando el widget de ALTCHA.
-
Resolver Desafío:
- El cliente resuelve el desafío.
-
Enviar Solución:
- La solución y los datos del usuario se envían al servidor.
-
Verificar en el Servidor:
- El servidor valida la solución y, si se utiliza el filtro de spam, valida la clasificación del spam.
Sin Filtro de Spam
Documentación completa: Integración del Servidor
Creación de un Desafío (Lado del Servidor)
- Generar Parámetros:
maxnumber
: Número aleatorio máximo (ajusta la dificultad).salt
: Cadena aleatoria (≥10 caracteres).secret_number
: Entero aleatorio (0…maxnumber).challenge
: Hash SHA-256 desalt + secret_number
.signature
: HMAC-SHA-256 dechallenge
con una clave secreta.
Validación de una Solución (Lado del Servidor)
-
Decodificar Carga:
- Extraer
algorithm
,challenge
,number
,salt
,signature
de la carga Base64-JSON.
- Extraer
-
Pasos de Validación:
alg_ok
: Verificar que el algoritmo sea ‘SHA-256’.challenge_ok
: Verificar quechallenge
coincida consha2_hex(concat(salt, number))
.signature_ok
: Verificar quesignature
coincida conhmac_sha2_hex(challenge, hmac_key)
.
Con Filtro de Spam
Documentación completa: Integración del Servidor
Usar la API con el Widget
- Configuración del Widget:
- Establecer
challengeurl
con tu clave API. - Habilitar
spamfilter
para clasificación de spam.
- Establecer
Verificación del Servidor
- Formato de Carga:
- Recibes un objeto JSON codificado en base64 con las propiedades
algoritmo
,signature
,verificationData
yverified
.
- Recibes un objeto JSON codificado en base64 con las propiedades
Verificar la Firma
- Calcular el hash SHA de
verificationData
. - Calcular la firma HMAC usando la parte secreta de tu clave API.
Ejemplo de pseudocódigo:
- Verificación:
- La carga se verifica si la firma calculada coincide con la propiedad
signature
.
- La carga se verifica si la firma calculada coincide con la propiedad
Verificar Campos (Filtro de Spam)
- Verificar
fields
yfieldsHash
:- Concatenar valores de campos con
\n
y calcular el hash SHA.
- Concatenar valores de campos con
Ejemplo de pseudocódigo:
- Validación:
- Los datos son correctos si el hash calculado coincide con
fieldsHash
.
- Los datos son correctos si el hash calculado coincide con
Código de Ejemplo
- Ejemplo Node.js:
Recomendaciones de Seguridad
-
Prevenir Ataques de Repetición:
- Invalidar desafíos previamente resueltos.
-
Caducidad de Desafíos:
- Incluir una marca de tiempo en el
salt
para limitar el período de validez. - Utilizar
salt = '<salt_aleatorio>?expires=<unix_ts>'
.
- Incluir una marca de tiempo en el
Puntos Fin de API
-
Crear un Nuevo Desafío:
GET /api/v1/challenge
-
Verificar Solución:
POST /api/v1/challenge/verify
-
Validar Firma del Servidor:
POST /api/v1/challenge/verify_server_signature