Preskoči na vsebino
TextArray

HMAC in zgoščevanje za podpise API: zaščita webhookov

Blog /

Ko vam storitev tretje osebe pošlje podatke prek webhooka ali morate preveriti pristnost zahteve API-ja, potrebujete način, da dokažete, da sporočilo ni bilo spremenjeno in da je res prišlo od osebe, ki pravi, da je. Samo zgoščevanje tega ne reši; potrebujete HMAC. Razumevanje razlike med navadnim zgoščevanjem in HMAC ter kako pravilno preveriti podpise, je razlika med varno integracijo in ogroženo.

Kaj je hash

Zgoščena vrednost je enosmerna funkcija, ki kateri koli vnos – besedilo, datoteko, odziv API-ja – spremeni v niz s fiksno dolžino. Isti vhod vedno proizvede enak izhod. Pogosti algoritmi zgoščevanja vključujejo SHA-256, SHA-1 in MD5. Uporabite lahko a hash generator če želite videti to v akciji: "zdravo" vedno postane isti hash SHA-256. Ključna lastnost je, da je zgoščevanje deterministično, vendar ga je nemogoče obrniti; izvirnega vnosa ne morete obnoviti iz zgoščene vrednosti.

Kaj je HMAC

HMAC je kratica za Hash-based Message Authentication Code. Za razliko od navadnega zgoščevanja HMAC združi sporočilo s skrivnim ključem pred zgoščevanjem. Ponudnik webhook ima skrivni ključ, zgosti sporočilo s tem ključem in vam pošlje sporočilo in zgoščeno vrednost. Postopek ponovite z istim tajnim ključem; če se vaš izračunani hash ujema s poslanim, veste, da je sporočilo pristno in nespremenjeno. The HMAC generator orodje vam omogoča, da to preizkusite z lastnim sporočilom in skrivnostjo.

Kritična razlika: hash proti HMAC

Evo zakaj je to pomembno:

Če vam storitev pošlje webhook samo z zgoščeno vrednostjo, jo lahko napadalec prestreže, spremeni podatke, znova izračuna zgoščeno vrednost, vi pa tega ne opazite. S HMAC in skupno skrivnostjo napadalec brez ključa ne more ponarediti veljavnega podpisa.

Preverjanje podpisov webhook v vaši kodi

Ko prispe webhook, storitev zagotovi vsebino sporočila in glavo podpisa (pogosto X-Signature oz X-Webhook-Signature). Vaša koda bi morala:

  1. Pridobite svoj skrivni ključ iz varne konfiguracije (spremenljivke okolja, tajni upravitelj).
  2. Z uporabo tega ključa izračunajte HMAC-SHA256 neobdelanega telesa zahteve.
  3. Primerjajte svoj izračunani HMAC bajt za bajtom z glavo podpisa (vedno uporabite primerjavo s konstantnim časom, da preprečite napade na časovno razporeditev).
  4. Če se ujemata, je webhook pristen. Če ne, ga zavrnite.

Večina ponudnikov webhookov dokumentira svoj algoritem HMAC in natančen format za podpis – včasih je to neobdelano telo JSON, včasih časovni žig, povezan s telesom. Natančno sledite njihovim specifikacijam.

HMAC proti JWT: kam ustrezajo

JWT (spletni žetoni JSON) se pogosto zamenjujejo s podpisi HMAC. JWT je samostojen žeton s tremi deli: glava, obremenitev (zahtevki) in podpis. Podpis lahko temelji na HMAC ali RSA. dekoderji JWT omogočajo pregledovanje in preverjanje žetonov. Medtem ko HMAC preverijo posamezno sporočilo, so JWT žetoni, ki jih shranite in pošljete z vsako zahtevo ali klicem API-ja. Za webhooke in enkratno preverjanje pristnosti sporočil je HMAC preprostejši in zadosten. Za žetone tekoče seje ali poverilnice API-ja je JWT pogosto bolj prilagodljiv.

Zasebnost: podpišite in potrdite v celoti v svojem brskalniku

Orodja HMAC in zgoščevanje TextArray delujejo v celoti v vašem brskalniku. Na strežnik ni naloženo nobeno sporočilo, skrivnost ali podpis. Račun ni potreben, orodja pa po nalaganju strani delujejo brez povezave. Koristne obremenitve webhooka in ključe API-ja lahko varno prilepite za testiranje podpisov in odpravljanje napak, ne da bi podatke izpostavili tretji osebi ali storitvi beleženja. To je še posebej dragoceno, ko med razvojem delate z občutljivimi ključi API ali podatki o strankah.

Začetek

Začnite z razumevanjem zgoščevanja: uporabite hash generator da vidite, kako isti vhod vedno proizvede isti izhod SHA-256. Nato se premaknite na generacija HMAC da vidite, kako skrivni ključ spremeni izhod. Poskusite nekoliko spremeniti ključ ali sporočilo; HMAC se popolnoma obrne, za razliko od naivne kontrolne vsote. Ko razumete mehaniko, jo uporabite v svoji logiki preverjanja webhooka. Za občutljive tovore, kot je šifrirano besedilo oz dekodirani žetoni, jih vedno seznanite z zahtevami, podpisanimi s HMAC, da zagotovite celovitost in izvor.