- بواسطة x32x01 ||
كارثة أمنية شفتها بعيني 😐
من فترة، أحد العملاء كلّمني وطلب مني أضيف بوابة الدفع Paymob
لنظام حجوزات جاهز كان شاريه من Codecanyon.
النظام شكله محترم:
لكن بعد ما قعدت ألف شوية جوّه الكود، فهمت:
لحد ما وصلت للحته اللي حرفيًا خلتني أمسك دماغي 🤦♂️
هتقولي:
فين المشكلة؟ الكود عادي أهو…
هقولك:
👉 الكود ده كارثة أمنية مكتملة الأركان
ليه؟
لأن قيمة الدفع جاية من: الـ Frontend 👉
وأي حاجة جاية من الـ Frontend:
❌ لا تُوثق
❌ لا تُصدق
❌ لا تُستخدم في فلوس
يعني إيه الكلام ده؟
يعني:
1️⃣ Click يمين
2️⃣ Inspect
3️⃣ أغير:
لـ:
4️⃣ Pay
🎉 مبروك:
✔️ ناجحة
✔️ فلوس اتدفعت
✔️ النظام مبسوط
لكن الحقيقة:
💸 الشركة اتسرقت : ودي ثغرة أخطر من SQL Injection في حالات كتير.
Hidden ≠ Secure
أي حاجة:
يعني:
كده:
أي Gateway:
سبحان الله…
يكلفوا الشركة:
من فترة، أحد العملاء كلّمني وطلب مني أضيف بوابة الدفع 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 دولار
ليه دي من أخطر أنواع الثغرات؟ ☠️
لأن:- مفيش Error
- مفيش Log
- مفيش Crash
- مفيش Alert
✔️ ناجحة
✔️ فلوس اتدفعت
✔️ النظام مبسوط
لكن الحقيقة:
💸 الشركة اتسرقت : ودي ثغرة أخطر من SQL Injection في حالات كتير.
الغلطة الشائعة عند المبتدئين ⚠️
ناس كتير لسه بتتعلم بتفكر: طالما input hidden يبقى آمن وده أكبر غلط.Hidden ≠ Secure
أي حاجة:
- Hidden
- Disabled
- Readonly
- يغيرها
- يبعتها
- يلعب فيها
القاعدة الذهبية: لا تثق في الـ Frontend أبدًا ❌
خدها قاعدة واحفرها في دماغك: الـ Frontend مكان عرض… مش حسابيعني:
- يعرض السعر
- يعرض التفاصيل
- لكن مبيحسبش
- ومبيقررّش
الحل الصح 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
يكلفوا الشركة:
- فلوس
- سمعة
- ثقة