HMAC webhook imzasını doğrulayın

Ham istek gövdesini, paylaşılan gizli anahtarı ve aldığınız imzayı yapıştırın; bu işlem HMAC'ı hesaplar ve bunları karşılaştırır. Bu, her webhook alıcısının yapması gereken ve kriptografiyle hiçbir ilgisi olmayan bir nedenle ilk denemede en sık başarısız olan kontroldür.

Doğru bir uygulamanın neden hala başarısız olduğu

Bunun neredeyse her zaman nedeni, karma işlemi yapılmadan önce yükün değişmiş olmasıdır. İmza, gelen tam baytları kapsar, bu nedenle JSON'u ayrıştırıp karma işleminden önce yeniden serileştiren bir alıcı, farklı bir dizeyi imzalar; anahtar sırası, boşluklar ve sayı biçimlendirmesi değişir. Önce ham gövdeyi yakalayın ve onu karma işlemine tabi tutun. Diğer sık görülen neden ise, bir önek ("sha256=") veya farklı bir kodlama (hex yerine base64) içeren bir imza başlığıdır.

Sabit zamanlı karşılaştırma

Üretim ortamında, sabit zamanlı bir fonksiyonla karşılaştırma yapın — Node'da crypto.timingSafeEqual, Python'da hmac.compare_digest. Normal bir dize karşılaştırması, ilk farklı baytta geri döner ve zaman farkı, yeterli sayıda deneme yapıldığında geçerli bir imzayı yeniden oluşturmak için yeterlidir. Bu sayfa da sabit zamanda karşılaştırma yapar, ancak kendinizin yapıştırdığı bir gizli anahtara karşı bu bir savunma değil, bir gösterimdir.

İmza, tazelik kontrolü anlamına gelmez.

Geçerli şekilde imzalanmış bir veri paketi sonsuza dek geçerli şekilde imzalı kalır, bu nedenle onu yakalayan herkes tekrar oynatabilir. Gerçek webhook sağlayıcıları, veri paketinin yanına bir zaman damgası ekler ve alıcıların birkaç dakikadan daha eski her şeyi reddetmesini bekler. Sağlayıcı size bir zaman damgası veriyorsa, bu imzalı dizenin bir parçasıdır, göz ardı edilecek bir başlık değildir.

Diğer araçlar

Tüm araçlar · Başlangıç rehberi · 39 mock REST API’nin tamamı

Son güncelleme