TLDR: Integrazione del Server ALTCHA
Questa guida offre una panoramica sintetica sull’integrazione di ALTCHA sul tuo server, coprendo entrambe le modalità: con e senza il filtro dello spam. Seguendo questi passaggi, garantirai una verifica sicura ed efficiente delle sottomissioni degli utenti, che tu abbia bisogno di una verifica di sfida di base o di un filtraggio dello spam avanzato.
Per un’integrazione semplice, considera di utilizzare le librerie ufficiali:
Panoramica della Configurazione
-
Recupero della Sfida:
- Il lato client recupera una sfida utilizzando il widget ALTCHA.
-
Risoluzione della Sfida:
- Il lato client risolve la sfida.
-
Invio della Soluzione:
- Soluzione e dati dell’utente vengono inviati al server.
-
Verifica sul Server:
- Il server convalida la soluzione e, se utilizza il filtro dello spam, convalida la classificazione dello spam.
Senza Filtro dello Spam
Documentazione completa: Integrazione del Server
Creazione di una Sfida (Lato server)
- Generare Parametri:
maxnumber
: Numero casuale massimo (aggiusta la difficoltà).salt
: Stringa casuale (≥10 caratteri).secret_number
: Numero intero casuale (0…maxnumber).challenge
: Hash SHA-256 disalt + secret_number
.signature
: HMAC-SHA-256 dichallenge
con una chiave segreta.
Convalida di una Soluzione (Lato server)
-
Decodifica Payload:
- Estrarre
algorithm
,challenge
,number
,salt
,signature
dal payload Base64-JSON.
- Estrarre
-
Passaggi di Convalida:
alg_ok
: Verifica che l’algoritmo sia ‘SHA-256’.challenge_ok
: Verifica chechallenge
corrisponda asha2_hex(concat(salt, number))
.signature_ok
: Verifica chesignature
corrisponda ahmac_sha2_hex(challenge, hmac_key)
.
Con Filtro dello Spam
Documentazione completa: Integrazione del Server
Uso dell’API con il Widget
- Configurazione del Widget:
- Imposta
challengeurl
con la tua chiave API. - Abilita
spamfilter
per la classificazione dello spam.
- Imposta
Verifica del Server
- Formato del Payload:
- Ricevi un oggetto JSON codificato in base64 con le proprietà
algorithm
,signature
,verificationData
everified
.
- Ricevi un oggetto JSON codificato in base64 con le proprietà
Verifica della Firma
- Calcola l’hash SHA di
verificationData
. - Calcola la firma HMAC usando la parte segreta della tua chiave API.
Esempio pseudo-codice:
- Verifica:
- Il payload è verificato se la firma calcolata corrisponde alla proprietà
signature
.
- Il payload è verificato se la firma calcolata corrisponde alla proprietà
Verifica dei Campi (Filtro dello Spam)
- Verifica
fields
efieldsHash
:- Concatenare i valori dei campi con
\n
e calcolare l’hash SHA.
- Concatenare i valori dei campi con
Esempio pseudo-codice:
- Convalida:
- I dati sono corretti se l’hash calcolato corrisponde a
fieldsHash
.
- I dati sono corretti se l’hash calcolato corrisponde a
Codice di Esempio
- Esempio in Node.js:
Raccomandazioni di Sicurezza
-
Prevenire gli Attacchi a Ripetizione:
- Invalida le sfide risolte in precedenza.
-
Scadenza della Sfida:
- Includi un timestamp nel
salt
per limitare il periodo di validità. - Usa
salt = '<random_salt>?expires=<unix_ts>'
.
- Includi un timestamp nel
Punti Fine dell’API
-
Creazione di una Nuova Sfida:
GET /api/v1/challenge
-
Verifica della Soluzione:
POST /api/v1/challenge/verify
-
Convalida della Firma del Server:
POST /api/v1/challenge/verify_server_signature