Bir Webhook'u Kimlik Doğrulamak, Onu Doğrulamak Değildir
Birçok geliştirici canlı ortama tehlikeli bir hata gönderiyor. Kimlik doğrulama (authentication) ile veri doğrulama (validation) kavramlarını birbirine karıştırıyorlar.
Kimlik doğrulama, mesajın doğru sağlayıcıdan geldiği anlamına gelir. Veri doğrulama ise mesajın içindeki verilerin doğru olduğu anlamına gelir.
Eğer sadece ilk adımı yaparsanız, para kaybedersiniz.
Yakın zamandaki bir WordPress zafiyeti (CVE-2026-9189) bu hatayı gözler önüne seriyor. Contact Form 7 PayPal ve Stripe Add-on, ödeme tutarlarını kontrol etmeyi başaramadı.
Bir saldırganın bunu nasıl suistimal ettiğini aşağıda görebilirsiniz:
- Bir saldırgan 2.000 dolarlık bir sipariş oluşturur.
- Saldırgan gerçek bir 1 dolarlık ödeme yapar.
- Fatura numarasını 2.000 dolarlık siparişle eşleşecek şekilde ayarlar.
- PayPal, 1 dolarlık ödeme için gerçek ve doğrulanmış bir bildirim gönderir.
- Eklenti, doğrulanmış mesajı görür ve 2.000 dolarlık siparişi "ödendi" olarak işaretler.
Eklenti, haberciye güvendi ancak mesajı görmezden geldi.
Bu hatayı yapmayın. Webhook'ları işlerken şu adımları izleyin:
- Mesajı imzalar veya paylaşılan sırlar (shared secrets) kullanarak kimlik doğrulayın.
- Tutarı ve para birimini veritabanınızdaki siparişle eşleştirin.
- Alıcı e-posta adresinin hesabınızla eşleştiğini doğrulayın.
- Siparişi ilişkilendirmek için sunucu tarafında bir değer kullanın. Sadece payload içinde gönderilen bir fatura ID'sine güvenmeyin.
- Yinelenen işlem kimliklerini (transaction IDs) görmezden gelmek için idempotency kullanın.
- Tüm istekler için TLS doğrulamasını aktif tutun.
- Fail closed (hata durumunda erişimi kapat) prensibini uygulayın. Herhangi bir kontrol başarısız olursa her şeyi durdurun.
Eğer Contact Form 7 PayPal ve Stripe Add-on'un 2.4.9 veya daha eski bir sürümünü kullanıyorsanız, hemen güncelleyin. Ödenmemiş her sipariş, bu suistimal için bir hedeftir.
Her zaman önce haberciyi doğrulayın, ardından veriyi kontrol edin.