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

x32x01
  • بواسطة x32x01 ||
كارثة أمنية شفتها بعيني 😐
من فترة، أحد العملاء كلّمني وطلب مني أضيف بوابة الدفع 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
  • x32x01
الردود
0
المشاهدات
823
x32x01
x32x01
x32x01
الردود
0
المشاهدات
845
x32x01
x32x01
x32x01
الردود
0
المشاهدات
726
x32x01
x32x01
x32x01
الردود
0
المشاهدات
809
x32x01
x32x01
x32x01
الردود
0
المشاهدات
649
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
2,110
المشاركات
2,317
أعضاء أكتب كود
517
أخر عضو
black doctor
عودة
أعلى