Vai al contenuto
TextArray

HMAC e hashing per le firme API: protezione dei webhook

Blog /

Quando un servizio di terze parti ti invia dati tramite webhook o devi autenticare una richiesta API, hai bisogno di un modo per dimostrare che il messaggio non è stato manomesso e proviene realmente da chi dice di averlo fatto. L'hashing da solo non risolve questo problema; hai bisogno dell'HMAC. Comprendere la differenza tra un hash semplice e un HMAC e come verificare correttamente le firme fa la differenza tra un'integrazione sicura e una compromessa.

Cos'è un hash

Un hash è una funzione unidirezionale che trasforma qualsiasi input (testo, file, risposta API) in una stringa di lunghezza fissa. Lo stesso input produce sempre lo stesso output. Gli algoritmi di hashing comuni includono SHA-256, SHA-1 e MD5. Puoi usare a generatore di hash per vederlo in azione: "ciao" diventa sempre lo stesso hash SHA-256. La proprietà chiave è che l'hashing è deterministico ma impossibile da invertire; non è possibile recuperare l'input originale dall'hash.

Cos'è l'HMAC

HMAC sta per codice di autenticazione del messaggio basato su hash. A differenza di un semplice hash, HMAC combina un messaggio con una chiave segreta prima dell'hashing. Il provider del webhook ha una chiave segreta, esegue l'hashing del messaggio con quella chiave e ti invia il messaggio e l'hash. Ripeti il processo con la stessa chiave segreta; se l'hash calcolato corrisponde a quello inviato, sai che il messaggio è autentico e non modificato. IL Generatore HMAC lo strumento ti consente di testarlo con il tuo messaggio e segreto.

La differenza fondamentale: hash vs HMAC

Ecco perché è importante:

Se un servizio ti invia un webhook con solo un hash, un utente malintenzionato può intercettarlo, modificare i dati, ricalcolare l'hash e tu non te ne accorgeresti. Con HMAC e un segreto condiviso, l'aggressore non può falsificare una firma valida senza la chiave.

Verifica delle firme dei webhook nel codice

Quando arriva un webhook, il servizio fornisce il payload del messaggio e un'intestazione della firma (spesso X-Signature O X-Webhook-Signature). Il tuo codice dovrebbe:

  1. Recupera la tua chiave segreta dalla configurazione sicura (variabili d'ambiente, un gestore segreto).
  2. Calcola l'HMAC-SHA256 del corpo della richiesta grezza utilizzando quella chiave.
  3. Confronta il byte per byte dell'HMAC calcolato con l'intestazione della firma (utilizza sempre il confronto a tempo costante per evitare attacchi temporali).
  4. Se corrispondono, il webhook è autentico. In caso contrario, rifiutalo.

La maggior parte dei provider di webhook documenta il proprio algoritmo HMAC e il formato esatto da firmare: a volte si tratta del corpo JSON non elaborato, a volte di un timestamp concatenato con il corpo. Seguire esattamente le loro specifiche.

HMAC vs JWT: dove si adattano

I JWT (JSON Web Token) vengono spesso confusi con le firme HMAC. Un JWT è un token autonomo composto da tre parti: un'intestazione, un carico utile (attestazioni) e una firma. La firma può essere basata su HMAC o RSA. Decodificatori JWT ti consente di ispezionare e verificare i token. Mentre gli HMAC verificano un singolo messaggio, i JWT sono token che archivi e invii con ogni richiesta o chiamata API. Per i webhook e l'autenticazione dei messaggi una tantum, HMAC è più semplice e sufficiente. Per i token di sessione in corso o le credenziali API, un JWT è spesso più flessibile.

Privacy: firma e verifica interamente nel tuo browser

Gli strumenti HMAC e hash di TextArray vengono eseguiti interamente nel tuo browser. Nessun messaggio, segreto o firma viene caricato su un server. Non è richiesto alcun account e gli strumenti funzionano offline dopo il caricamento della pagina. Puoi incollare in modo sicuro i payload webhook e le chiavi API per testare ed eseguire il debug delle firme senza esporre i dati a terze parti o a servizi di registrazione. Ciò è particolarmente utile quando lavori con chiavi API sensibili o dati dei clienti durante lo sviluppo.

Iniziare

Inizia comprendendo l'hashing: usa il file generatore di hash per vedere come lo stesso input produce sempre lo stesso output SHA-256. Quindi spostati a Generazione HMAC per vedere come una chiave segreta modifica l'output. Prova a cambiare leggermente la chiave o il messaggio; l'HMAC si capovolge completamente, a differenza di un checksum ingenuo. Una volta compresi i meccanismi, applicali alla logica di verifica del webhook. Per carichi utili sensibili come testo crittografato O gettoni decodificati, abbinali sempre alle richieste firmate HMAC per garantire l'integrità e l'origine.