خطأ برمجي خطير في بوابات الدفع

x32x01
  • بواسطة x32x01 ||
  • #1
كارثة أمنية شفتها بعيني 😐
من فترة، أحد العملاء كلّمني وطلب مني أضيف بوابة الدفع Paymob
لنظام حجوزات جاهز كان شاريه من Codecanyon.
النظام شكله محترم:
  • Design حلو
  • شغل Plugins
  • Payment Gateways
  • Documentation
  • مبيعات بالهبل
قلت تمام… شغل سهل.
لكن بعد ما قعدت ألف شوية جوّه الكود، فهمت:
  • Structure الـ Plugins
  • نظام الـ API
  • الـ Rules اللي بتسمح تركّب بوابة دفع جديدة
كل ده كان جميل…
لحد ما وصلت للحته اللي حرفيًا خلتني أمسك دماغي 🤦‍♂️



الكارثة الحقيقية: الثقة في الـ Frontend 💥​

عملية الدفع في النظام كانت ماشية كده:
PHP:
$credit = $request->input('credit', 0);
$paymentGateway->process($credit, $payment);
هتقولي:
فين المشكلة؟ الكود عادي أهو…
هقولك:
👉 الكود ده كارثة أمنية مكتملة الأركان
ليه؟
لأن قيمة الدفع جاية من: الـ Frontend 👉
وأي حاجة جاية من الـ Frontend:
❌ لا تُوثق​
❌ لا تُصدق​
❌ لا تُستخدم في فلوس​



يعني إيه Frontend Value؟ 🤔​

المبرمجين عاملين سعر الخدمة كده في الـ HTML:
HTML:
<input name="credit" type="hidden" value="1150" />
يعني إيه الكلام ده؟
يعني:
  • السعر موجود في Hidden Input
  • المستخدم يبعته زي ما هو
  • السيرفر يستقبله
  • الدفع يتم على أساسه
طب لو المستخدم:
  • فتح Inspect Element
  • غيّر الرقم
  • بقى 1 بدل 1150
يحصل إيه؟ 😈



الاختراق في 5 ثواني 😎​

من غير:
  • برامج
  • Tools
  • Burp
  • SQL Injection
  • XSS
كل اللي محتاجه:
1️⃣ Click يمين​
2️⃣ Inspect​
3️⃣ أغير: value="1150"
لـ: value="1"
4️⃣ Pay​
🎉 مبروك:
  • خدمة بـ 1150 دولار
  • اشتريتها بـ 1 دولار
وده اسمه: Business Logic Vulnerability 👉



ليه دي من أخطر أنواع الثغرات؟ ☠️​

لأن:
  • مفيش Error
  • مفيش Log
  • مفيش Crash
  • مفيش Alert
العملية:
✔️ ناجحة​
✔️ فلوس اتدفعت​
✔️ النظام مبسوط​
لكن الحقيقة:
💸 الشركة اتسرقت : ودي ثغرة أخطر من SQL Injection في حالات كتير.



الغلطة الشائعة عند المبتدئين ⚠️​

ناس كتير لسه بتتعلم بتفكر: طالما input hidden يبقى آمن وده أكبر غلط.
Hidden ≠ Secure
أي حاجة:
  • Hidden
  • Disabled
  • Readonly
المستخدم يقدر:
  • يغيرها
  • يبعتها
  • يلعب فيها
خصوصًا لو فلوس 💰



القاعدة الذهبية: لا تثق في الـ Frontend أبدًا ❌​

خدها قاعدة واحفرها في دماغك: الـ Frontend مكان عرض… مش حساب
يعني:
  • يعرض السعر
  • يعرض التفاصيل
  • لكن مبيحسبش
  • ومبيقررّش
كل الحسابات الحساسة: لازم Backend فقط 👉



الحل الصح 100% ✅​

الطريقة السليمة:
  • تباصي ID الخدمة
  • تباصي Coupon (لو موجود)
  • والباقي كله Backend
مثال صح 👇

Frontend​

HTML:
<input type="hidden" name="service_id" value="12" />
<input type="hidden" name="coupon" value="SALE10" />

Backend​

PHP:
$serviceId = $request->input('service_id');
$couponCode = $request->input('coupon');

// جلب الخدمة من الداتابيز
$service = Service::findOrFail($serviceId);

// السعر الحقيقي
$price = $service->price;

// التحقق من الكوبون
if ($couponCode) {
    $coupon = Coupon::where('code', $couponCode)
        ->where('is_active', 1)
        ->first();

    if ($coupon) {
        $price -= $coupon->discount;
    }
}

// هنا فقط يتم الدفع
$paymentGateway->process($price, $payment);
كده:
  • السعر من الداتابيز
  • الكوبون متحقق منه
  • المستخدم مالوش أي سلطة



Paymob نفسها مش المشكلة ⚠️​

خلّينا نكون واضحين:
  • Paymob محترمة
  • Stripe محترمة
  • PayPal محترمة
المشكلة: في الكود اللي قبل بوابة الدفع 👉
أي Gateway:
  • هتدفع الرقم اللي انت بعته
  • مش هتراجع نيتك
المسؤولية كلها عليك كمبرمج.



الصدمة الأكبر: النظام عامل مبيعات بالهبل 😶​

بعد ما شوفت الكود، دخلت أشوف:
  • النظام على Codecanyon
  • عامل أكتر من 1500 عملية بيع
  • سعره 70$
يعني تقريبًا:
  • 105,000 دولار
  • أكتر من 1,600,000 جنيه مصري 💰
وسايبين ثغرة زي دي؟
سبحان الله…



هل الثغرة دي منتشرة؟ للأسف أيوه 😔​

شفتها في:
  • أنظمة حجوزات
  • أنظمة اشتراكات
  • كورسات أونلاين
  • Membership Systems
  • SaaS صغير
خصوصًا:
  • المنتجات الجاهزة
  • Scripts الرخيصة
  • أنظمة Codecanyon



نصايح سريعة لأي مبرمج 🧠​

  • ❌ متحسبش فلوس في Frontend
  • ❌ متصدقش Hidden Input
  • ❌ متثقش في JavaScript
  • ✅ اعتمد على Database
  • ✅ اعمل Validation
  • ✅ اعمل Logs
  • ✅ اختبر Business Logic



لو انت Pentester أو بتتعلم أمن معلومات 🧑‍💻​

الثغرة دي:
  • مطلوبة جدًا
  • موجودة في الواقع
  • سهلة الاكتشاف
  • مربحة للمهاجم
دور دايمًا على:
  • price
  • credit
  • amount
  • total
  • balance
وشوف: جايين منين؟ 👉



الخلاصة: الثغرات مش دايمًا كود معقد 💣​

مش كل اختراق:
  • SQL
  • XSS
  • RCE
أحيانًا: سطرين كود غلط 👉
يكلفوا الشركة:
  • فلوس
  • سمعة
  • ثقة
خلي بالك… واللي لسه بيتعلم: إوعى تقع في الفخ ده
 
التعديل الأخير:

المواضيع ذات الصلة

x32x01
الردود
0
المشاهدات
1K
x32x01
x32x01
x32x01
الردود
0
المشاهدات
1K
x32x01
x32x01
x32x01
الردود
0
المشاهدات
454
x32x01
x32x01
x32x01
الردود
0
المشاهدات
255
x32x01
x32x01
x32x01
الردود
0
المشاهدات
438
x32x01
x32x01
الوسوم : الوسوم
backend validation business logic vulnerability paymob أخطاء برمجية خطيرة أمان الدفع الإلكتروني أمن التطبيقات التحقق من البيانات بوابات الدفع ثغرات منطقية حماية الأسعار
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟

آخر المشاركات

إحصائيات المنتدى
المواضيع
2,388
المشاركات
2,601
أعضاء أكتب كود
574
أخر عضو
الياس
عودة
أعلى