Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: Laravel’de Webhook Yüklerini İmzalama – Sessizce Bozan Hata
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » Laravel’de Webhook Yüklerini İmzalama – Sessizce Bozan Hata

Yazılım

Laravel’de Webhook Yüklerini İmzalama – Sessizce Bozan Hata

teknomers
Son güncelleme: 21 Temmuz 2026 12:32
teknomers
Paylaş
Paylaş

Bu makale, bir uygulamanın diğer bir servise gönderdiği veya aldığı webhooks’ların güvenliğini sağlamak için HMAC imza sürecinin doğru bir şekilde nasıl uygulanacağını ele alıyor. Webhooks, uygulamanızın belirli bir etkinliği tetiklediğinde başka bir servise bilgi göndermesine olanak tanır. Güvenilirlik açısından, alıcının yükün gerçekten sizden geldiğini ve yolculuk sırasında değiştirilmediğini doğrulaması önemlidir. Standard cevap, yükü paylaşılan bir gizli anahtarla hash’lemektir: yükü hash’leyin, hash’i isteğin yanında gönderin ve alıcıya tekrar hesaplatın ve karşılaştırın.


Sorun

Bu işlem kulağa basit geliyor. Gerçekten de basit, ta ki yanlış byte’ları imzalayana kadar.


Doğru İmzalama

Temel yöntem:

$body = json_encode($payload);
$signature = hash_hmac('sha256', $body, $secret);

$signature‘ı bir başlıkta gönderin (örneğin, X-Signature), ve alıcı, aldığı yük için HMAC’i tekrar hesaplar ve karşılaştırır. Bu kısım neredeyse herkes tarafından doğru yapılır.


Sorun: Ağ Üzerinden Geçen Tam Byte’ları İmzalayın

Görünüşte doğru olan ama yanlış bir versiyon:

// Görünüşte doğru ama iki farklı serileştirme gönderiyor
$payload = ['event' => 'order.created', 'total' => 42.00];
$signature = hash_hmac('sha256', json_encode($payload), $secret);

Http::withHeaders(['X-Signature' => $signature])
    ->post($url, $payload); // bu, $payload'ı dahili olarak tekrar serileştirir

Hata: json_encode($payload)‘yi bir kere, manuel olarak çağırdınız ve ardından diziyi Laravel’in HTTP istemcisine verdiniz. Bu işlem, istek gövdesini oluştururken dahili olarak tekrar JSON’lar. Bu, iki ayrı serileştirme geçirir. Çoğu zaman bunlar aynı byte’ları üretir, bu yüzden testlerde ve hatta üretimde uzun bir süre çalışır. Fakat bir gün çalışmaz hale gelir – bir float farklı biçimlendirilir, ya da bazı kodlama seçenekleri farklı olur ve imza sessiz bir şekilde uyuşmamaya başlar. Bu takibi zor bir hata çünkü hiçbir hata mesajı vermez; alıcı sadece webhooks’unuzu belirsiz bir sebepten reddetmeye başlar.

Çözüm, bir kerede serileştirmek ve o tam string’i göndermektir:

// Bir kere serileştir, o string'i imzala, o tam string'i gönder
$body = json_encode($payload);
$signature = hash_hmac('sha256', $body, $secret);

Http::withHeaders(['X-Signature' => $signature])
    ->withBody($body, 'application/json')
    ->post($url);

withBody(), ham string’i olduğu gibi gönderir, istemcinin dizi-JSON aşamasını tamamen atlayarak. Artık imzaladığınız byte’lar ve gönderdiğiniz byte’lar kesinlikle aynı, tesadüfen değil, yapısal olarak.


Alıcı Tarafında Doğrulama

Tam byte’ları prensibi, yazma tarafında olduğu gibi, alıcı tarafında da geçerlidir ve burada da yanlış yapmak oldukça kolaydır:

public function verify(Request $request, string $secret): bool
{
    $expected = hash_hmac('sha256', $request->getContent(), $secret);

    return hash_equals($expected, $request->header('X-Signature', ''));
}

İki detayı belirtmek gerekir:

  • $request->getContent(), değil $request->all() ya da json_encode($request->json()->all()). JSON’u çözümleyip tekrar kodlayarak “okunabilirlik” için yeniden kodlarsanız, alıcı tarafında tam olarak aynı hatayı tekrar yaratmış olursunuz – artık aslında imzalanan ham byte’larla karşılaştırmak yerine tekrar serileştirilmiş bir versiyonla karşılaştırıyorsunuz.
  • hash_equals(), değil ===. Basit bir string karşılaştırması, ilk farklı byte’ta kısa kesilir ve bu durum, bir saldırganın teorik olarak doğru imzayı bir byte bir byte tahmin etmesi için kullanabileceği zamanlama bilgisi sızdırır. hash_equals(), hangi kısıtlardan bağımsız olarak sabit zamanlı çalışır.


Nereden Geldi Bu

Bu yazıyı, Filament Outbox adlı projem için webhooks kanalı oluştururken yazdım. Bu, Laravel’in yerel Notification sistemini kullanarak Discord, Slack, Microsoft Teams ve imzalı webhook bildirim kanalları ile oluşturulmuş küçük bir Laravel paketidir. Normal bir Notification sınıfı yazın, öğrenilecek yeni API yok. Yönetim uç noktalarını yönetmek, gönderim geçmişini gözden geçirmek ve hataları yeniden denemek için Filament v5 yönetim paneli de mevcuttur, ancak ücretsiz paket herhangi bir Laravel uygulamasında bağımsız olarak çalışabilir.


Sonuç

Eğer yığınınızda webhooks’ları imzalıyorsanız, bu kesin desen için hızlı bir denetim yapmanız faydalı olabilir – elle hazırlanan bir json_encode() sonrasında diziyi bir HTTP istemcisine vermek, çift serileştirme yapmadan fark edilmeden yazılabilecek kolay bir şeydir. Bununla ilgili başkalarının deneyimi olup olmadığını ya da daha temiz bir desen olup olmadığını merak ediyorum – yorumlarda bildirin.

Kaynak: Orijinal Makale

Contents
  • Sorun
  • Doğru İmzalama
  • Sorun: Ağ Üzerinden Geçen Tam Byte’ları İmzalayın
  • Alıcı Tarafında Doğrulama
  • Nereden Geldi Bu
  • Sonuç
Laravel 11’de defer() Kullanarak API Cevaplarımızı Tek Bir Kuyruğa Dokunmadan 3 Kat Hızlandırmak
2026’da yazılımcı istihdamı, yeni başlayanlar ve büyüyen işletmeler için büyük bir zorluk haline geldi.
Yeni Güncelleme ile Microsoft Flash’ı Tarihe Gömüyor
Geliştirici Günlüğü: 2026-07-07
Laravel’de XSS Önleme — Neden {!! !!} Güvenli ile Hacklenmiş Arasındaki Sınırdır
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Microsoft’tan Acil Çözüm: WSUS Senkronizasyon Gecikmeleri ve Zaman Aşımı
Sonraki Makale LG monitörleri bilgisayarınıza gizlice zararlı yazılım yüklüyor

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Jack Dorsey, Takımlar İçin Yeni Grup Sohbet Platformu Buzz ile Slack’a Rakip Oluyor
Genel
Evreni saran eğlence uygulaması ve AI’nin yükselişi
Yapay Zeka
Nvidia, yüzbinlerce Grace sunucusu gönderdi; CPU’lar ön plana çıktı
Donanım
Kritik: Anubis fidye yazılımı Coca-Cola Fairlife’ı hedef aldı!
Siber Güvenlik
Substack Yapay Zeka Algılayıcısı ile Yazılı İçeriği Kestiriyor
Liste
Acil: N-Günlerin Sonu! Hızlı Yamanın Tükenişi ve Krizler
Siber Güvenlik
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?