İçeriğe atla
TextArray

API imzaları için HMAC ve karma oluşturma: web kancalarını koruma

Blog /

Bir üçüncü taraf hizmeti size web kancası aracılığıyla veri gönderdiğinde veya bir API isteğinin kimliğini doğrulamanız gerektiğinde, mesajın tahrif edilmediğini ve gerçekten bunu söyleyen kişiden geldiğini kanıtlamanın bir yoluna ihtiyacınız vardır. Hashing tek başına bunu çözmez; HMAC'a ihtiyacınız var. Düz karma ile HMAC arasındaki farkı anlamak ve imzaların doğru şekilde nasıl doğrulanacağını anlamak, güvenli entegrasyon ile güvenliği ihlal edilmiş entegrasyon arasındaki farktır.

Hash nedir

Karma, herhangi bir girişi (metin, dosya, API yanıtı) sabit uzunlukta bir dizeye dönüştüren tek yönlü bir işlevdir. Aynı girdi her zaman aynı çıktıyı üretir. Yaygın karma algoritmaları arasında SHA-256, SHA-1 ve MD5 bulunur. Bir kullanabilirsiniz karma oluşturucu bunu çalışırken görmek için: "merhaba" her zaman aynı SHA-256 karma değeri olur. Temel özellik, karma işleminin deterministik olması ancak tersine çevrilmesinin imkansız olmasıdır; Orijinal girişi karmadan kurtaramazsınız.

HMAC nedir?

HMAC, Karma Tabanlı Mesaj Kimlik Doğrulama Kodu anlamına gelir. Basit karmadan farklı olarak HMAC, karma işleminden önce bir mesajı gizli bir anahtarla birleştirir. Webhook sağlayıcısının gizli bir anahtarı vardır, bu anahtarla mesaja hash uygular ve mesajı ve hash'i size gönderir. İşlemi aynı gizli anahtarla tekrarlarsınız; hesaplanan hash'iniz gönderilenle eşleşiyorsa mesajın orijinal ve değiştirilmemiş olduğunu bilirsiniz. HMAC jeneratörü araç bunu kendi mesajınız ve sırrınızla test etmenize olanak tanır.

Kritik fark: karma ve HMAC

İşte bu neden önemli:

Bir hizmet size yalnızca hash içeren bir web kancası gönderirse, bir saldırgan bunu engelleyebilir, verileri değiştirebilir, hash'i yeniden hesaplayabilir ve siz fark etmezsiniz. HMAC ve paylaşılan bir sır ile saldırgan, anahtar olmadan geçerli bir imzayı taklit edemez.

Kodunuzdaki webhook imzalarını doğrulama

Bir webhook geldiğinde hizmet, mesaj yükünü ve bir imza başlığını (genellikle X-Signature veya X-Webhook-Signature). Kodunuz şunları yapmalıdır:

  1. Gizli anahtarınızı güvenli yapılandırmadan (ortam değişkenleri, gizli yönetici) alın.
  2. Bu anahtarı kullanarak ham istek gövdesinin HMAC-SHA256'sını hesaplayın.
  3. Hesaplanan HMAC baytını bayt başına imza başlığıyla karşılaştırın (zamanlama saldırılarını önlemek için her zaman sabit zamanlı karşılaştırmayı kullanın).
  4. Eşleşirlerse webhook orijinaldir. Değilse, reddedin.

Çoğu webhook sağlayıcısı, HMAC algoritmasını ve imzalanacak tam biçimi belgelendirir; bu bazen ham JSON gövdesi, bazen de gövdeyle birleştirilmiş bir zaman damgasıdır. Spesifikasyonlarını tam olarak takip edin.

HMAC ve JWT: nereye uyuyorlar

JWT'ler (JSON Web Tokenları) genellikle HMAC imzalarıyla karıştırılır. JWT, üç bölümden oluşan bağımsız bir belirteçtir: başlık, yük (talepler) ve imza. İmza HMAC tabanlı veya RSA tabanlı olabilir. JWT kod çözücüler jetonları incelemenize ve doğrulamanıza izin verin. HMAC'ler tek bir mesajı doğrularken JWT'ler, her istek veya API çağrısıyla birlikte saklayıp gönderdiğiniz belirteçlerdir. Web kancaları ve tek seferlik mesaj kimlik doğrulaması için HMAC daha basit ve yeterlidir. Devam eden oturum belirteçleri veya API kimlik bilgileri için JWT genellikle daha esnektir.

Gizlilik: Tamamen tarayıcınızda imzalayın ve doğrulayın

TextArray'in HMAC ve karma araçları tamamen tarayıcınızda çalışır. Sunucuya hiçbir mesaj, sır veya imza yüklenmez. Hiçbir hesap gerekmez ve araçlar, sayfa yüklendikten sonra çevrimdışı çalışır. Verileri üçüncü tarafa veya günlük hizmetine ifşa etmeden imzaları test etmek ve hata ayıklamak için web kancası yüklerini ve API anahtarlarını güvenle yapıştırabilirsiniz. Bu, özellikle geliştirme sırasında hassas API anahtarları veya müşteri verileriyle çalışırken değerlidir.

Başlarken

Hashing'i anlayarak başlayın: karma oluşturucu aynı girişin her zaman aynı SHA-256 çıkışını nasıl ürettiğini görmek için. Daha sonra şuraya taşın: HMAC üretimi gizli bir anahtarın çıktıyı nasıl değiştirdiğini görmek için. Anahtarı veya mesajı biraz değiştirmeyi deneyin; HMAC, saf bir sağlama toplamından farklı olarak tamamen döner. Mekanizmayı anladıktan sonra bunu web kancası doğrulama mantığınıza uygulayın. Gibi hassas yükler için şifrelenmiş metin veya kodu çözülmüş jetonlar, bütünlüğü ve kaynağı garanti altına almak için bunları her zaman HMAC imzalı isteklerle eşleştirin.