المصادقة على الـ Webhook لا تعني التحقق من صحته
يرسل العديد من المطورين ثغرة برمجية خطيرة إلى بيئة الإنتاج، حيث يخلطون بين المصادقة (Authentication) والتحقق من الصحة (Validation).
المصادقة تعني أن الرسالة جاءت من المزود الصحيح. التحقق من الصحة يعني أن البيانات الموجودة داخل الرسالة صحيحة.
إذا اكتفيت بالخطوة الأولى فقط، فستخسر المال.
تُظهر ثغرة أمنية حديثة في WordPress (CVE-2026-9189) هذا الخطأ؛ حيث فشلت إضافة Contact Form 7 PayPal and Stripe Add-on في التحقق من مبالغ الدفع.
إليك كيف يستغل المهاجم هذا الأمر:
- يقوم المهاجم بإنشاء طلب بقيمة 2,000 دولار.
- يقوم المهاجم بإجراء عملية دفع حقيقية بقيمة 1 دولار.
- يقوم بضبط رقم الفاتورة ليتطابق مع الطلب البالغ 2,000 دولار.
- يرسل PayPal إشعاراً حقيقياً وموثقاً لعملية الدفع البالغة 1 دولار.
- ترى الإضافة الرسالة الموثقة وتعتبر الطلب البالغ 2,000 دولار مدفوعاً.
لقد وثقت الإضافة في المرسل ولكنها تجاهلت محتوى الرسالة.
لا تقع في هذا الخطأ. عند التعامل مع الـ webhooks، اتبع هذه الخطوات:
- قم بمصادقة الرسالة باستخدام التواقيع (signatures) أو الأسرار المشتركة (shared secrets).
- طابق المبلغ والعملة مع الطلب الموجود في قاعدة بياناتك.
- تحقق من أن البريد الإلكتروني للمستلم يطابق حسابك.
- استخدم قيمة من جانب الخادم (server-side) لربط الطلب. لا تثق في معرف الفاتورة (invoice ID) المرسل في الحمولة (payload) بمفرده.
- استخدم خاصية الـ idempotency لتجاهل معرفات المعاملات المكررة.
- حافظ على تفعيل التحقق من TLS لجميع الطلبات.
- اعتمد مبدأ "الفشل المغلق" (Fail closed)؛ إذا فشل أي فحص، أوقف كل شيء.
إذا كنت تستخدم إصدار 2.4.9 أو أقدم من Contact Form 7 PayPal and Stripe Add-on، فقم بتحديثه الآن. فكل طلب غير مدفوع هو هدف لهذا الاستغلال.
قم دائماً بمصادقة المرسل، ثم تحقق من البيانات.