TLDR : Intégration du serveur ALTCHA
Ce guide offre un aperçu succinct de l’intégration d’ALTCHA sur votre serveur, couvrant les deux modes : avec et sans le filtre anti-spam. En suivant ces étapes, vous assurerez une vérification sécurisée et efficace des soumissions des utilisateurs, que vous ayez besoin d’une vérification de défi de base ou d’un filtrage avancé des spams.
Pour une intégration facile, envisagez d’utiliser les bibliothèques officielles:
Aperçu de la configuration
-
Récupérer le défi:
- Le côté client récupère un défi en utilisant le widget ALTCHA.
-
Résoudre le défi:
- Le côté client résout le défi.
-
Soumettre la solution:
- La solution et les données de l’utilisateur sont soumises au serveur.
-
Vérifier sur le serveur:
- Le serveur valide la solution et, s’il utilise le filtre anti-spam, valide la classification du spam.
Sans filtre anti-spam
Documentation complète : Intégration du serveur
Création d’un défi (Côté serveur)
- Générer les paramètres:
maxnumber
: Nombre aléatoire maximum (ajuste la difficulté).salt
: Chaîne aléatoire (≥10 caractères).secret_number
: Entier aléatoire (0…maxnumber).challenge
: Hash SHA-256 desalt + secret_number
.signature
: HMAC-SHA-256 dechallenge
avec une clé secrète.
Validation d’une solution (Côté serveur)
-
Décoder la charge utile:
- Extraire
algorithm
,challenge
,number
,salt
,signature
de la charge utile Base64-JSON.
- Extraire
-
Étapes de validation:
alg_ok
: Vérifier que l’algorithme est ‘SHA-256’.challenge_ok
: Vérifier quechallenge
correspond àsha2_hex(concat(salt, number))
.signature_ok
: Vérifier quesignature
correspond àhmac_sha2_hex(challenge, hmac_key)
.
Avec filtre anti-spam
Documentation complète : Intégration du serveur
Utilisation de l’API avec le Widget
- Configuration du Widget:
- Définissez
challengeurl
avec votre clé API. - Activez
spamfilter
pour la classification du spam.
- Définissez
Vérification du serveur
- Format de la charge utile:
- Vous recevez un objet JSON encodé en base64 avec les propriétés
algorithm
,signature
,verificationData
etverified
.
- Vous recevez un objet JSON encodé en base64 avec les propriétés
Vérification de la signature
- Calculer le hash SHA de
verificationData
. - Calculer la signature HMAC en utilisant la partie secrète de votre clé API.
Exemple de pseudo-code :
- Vérification:
- La charge utile est vérifiée si la signature calculée correspond à la propriété
signature
.
- La charge utile est vérifiée si la signature calculée correspond à la propriété
Vérification des champs (Filtre anti-spam)
- Vérifier les
champs
etfieldsHash
:- Concaténer les valeurs des champs avec
\n
et calculer le hash SHA.
- Concaténer les valeurs des champs avec
Exemple de pseudo-code :
- Validation:
- Les données sont correctes si le hash calculé correspond à
fieldsHash
.
- Les données sont correctes si le hash calculé correspond à
Exemple de code
- Exemple Node.js :
Recommandations de sécurité
-
Prévenir les attaques de rejeu:
- Invalider les défis déjà résolus.
-
Expiration du défi:
- Inclure un horodatage dans le
salt
pour limiter la période de validité. - Utiliser
salt = '<random_salt>?expires=<unix_ts>'
.
- Inclure un horodatage dans le
Points de terminaison de l’API
-
Créer un nouveau défi :
GET /api/v1/challenge
-
Vérifier la solution:
POST /api/v1/challenge/verify
-
Valider la signature du serveur:
POST /api/v1/challenge/verify_server_signature
Pour plus de détails, consultez la documentation officielle.