- بواسطة x32x01 ||
كارثة أمنية شفتها بعيني 
من فترة، أحد العملاء كلّمني وطلب مني أضيف بوابة الدفع Paymob
لنظام حجوزات جاهز كان شاريه من Codecanyon.
النظام شكله محترم:
لكن بعد ما قعدت ألف شوية جوّه الكود، فهمت:
لحد ما وصلت للحته اللي حرفيًا خلتني أمسك دماغي
الكارثة الحقيقية: الثقة في الـ Frontend
عملية الدفع في النظام كانت ماشية كده:
هتقولي:
فين المشكلة؟ الكود عادي أهو…
هقولك:
الكود ده كارثة أمنية مكتملة الأركان
ليه؟
لأن قيمة الدفع جاية من: الـ Frontend
وأي حاجة جاية من الـ Frontend:
لا تُوثق
لا تُصدق
لا تُستخدم في فلوس
يعني إيه Frontend Value؟
المبرمجين عاملين سعر الخدمة كده في الـ HTML:
يعني إيه الكلام ده؟
يعني:

الاختراق في 5 ثواني
من غير:
Click يمين
Inspect
أغير:
لـ:
Pay
مبروك:

ليه دي من أخطر أنواع الثغرات؟
لأن:
ناجحة
فلوس اتدفعت
النظام مبسوط
لكن الحقيقة:
الشركة اتسرقت : ودي ثغرة أخطر من SQL Injection في حالات كتير.
الغلطة الشائعة عند المبتدئين
ناس كتير لسه بتتعلم بتفكر: طالما input hidden يبقى آمن وده أكبر غلط.
Hidden ≠ Secure
أي حاجة:

القاعدة الذهبية: لا تثق في الـ Frontend أبدًا
خدها قاعدة واحفرها في دماغك: الـ Frontend مكان عرض… مش حساب
يعني:

الحل الصح 100%
الطريقة السليمة:

كده:
Paymob نفسها مش المشكلة
خلّينا نكون واضحين:

أي Gateway:
الصدمة الأكبر: النظام عامل مبيعات بالهبل
بعد ما شوفت الكود، دخلت أشوف:
سبحان الله…
هل الثغرة دي منتشرة؟ للأسف أيوه
شفتها في:
نصايح سريعة لأي مبرمج
لو انت Pentester أو بتتعلم أمن معلومات
الثغرة دي:

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

يكلفوا الشركة:

من فترة، أحد العملاء كلّمني وطلب مني أضيف بوابة الدفع 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
value="1150"لـ:
value="1"- خدمة بـ 1150 دولار
- اشتريتها بـ 1 دولار
ليه دي من أخطر أنواع الثغرات؟
لأن:- مفيش Error
- مفيش Log
- مفيش Crash
- مفيش Alert
لكن الحقيقة:
الغلطة الشائعة عند المبتدئين
ناس كتير لسه بتتعلم بتفكر: طالما 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
يكلفوا الشركة:
- فلوس
- سمعة
- ثقة