# ثغرات روابط تطبيق التاجر (API) — تقرير فحص

> **الحالة: موثّق فقط، ما انصلح شي.** هاد تقرير لتاسك منفصل جاي.
> تاريخ الفحص: 3 تشرين الأول 2026. الفحص قراءة فقط، على الكود، مع التأكد من البيانات على نسخة محلية من قاعدة اللايف.
> **ملف حساس:** فيه وصف ثغرات موجودة على اللايف. لا تشاركه برا الفريق.

## الخلاصة بسطرين
- روابط «تطبيق التاجر» (`api/v2/seller/...`) موجودة وشغّالة على السيرفر، مع إنه **ما في تطبيق تاجر** (الـ PWA بيستخدم صفحات الموقع، مو هالروابط).
- الحماية الوحيدة عليها: **«لازم تكون مسجّل دخول»**. ما في أي تأكد إنه المستخدم **تاجر**. وكل زبون بتطبيق الزبائن مسجّل دخول، فبيقدر نظريًا يستخدمها.

## الحل المقترح (للتاسك الجاي)
1. **شرط واحد على كل المجموعة:** «لازم يكون تاجر»، وإلا مرفوض. هاد لحاله بيسكّر كل الثغرات اللي بتطال **الزبائن**. وما بيأثر على حدا، لأنه ما في شي بيستخدم هالروابط هلق.
2. **بعدها:** إصلاحات صغيرة لكل رابط بيسمح لتاجر يلمس بيانات **تاجر ثاني** (موضحة بالجدول تحت).
3. **قبل ما يصير تطبيق تاجر رسمي:** لازم تكون النقطتين فوق مخلّصين.

---

## 1. خطيرة وشغّالة على اللايف (جداولها موجودة)

| # | الرابط | شو بيقدر يعمل أي زبون مسجّل دخول | وين بالكود | تأكدت بنفسي |
|---|---|---|---|---|
| 1 | `products/update/{product}` | **يعدّل أي منتج** بالمتجر (الاسم والسعر والصور والمخزون والتصنيفات)، وحتى يحوّل ملكيته لنفسه وينشره مباشرة | `Api/V2/Seller/ProductController.php:164` + `Services/ProductService.php:377-523` | ✅ |
| 2 | `digital-products/update/{product}` | نفس السابق لأي منتج، وبيصفّر مخزونه | `DigitalProductController.php:95-138` | ✅ |
| 3 | `digital-products/destroy/{id}` | **يحذف أي منتج نهائيًا** مع كل ما يتعلق فيه (ترجمات، مخزون، عربات، تقييمات...) | `DigitalProductController.php:140-147` + `ProductService.php:535-549` | ✅ |
| 4 | `file/delete/{id}` | **يحذف أي ملف/صورة بالموقع نهائيًا** من السيرفر (صور المنتجات والبانرات والشعارات). فحص الملكية بيشتغل على التجار بس، والزبون بيتخطاه | `SellerFileUploadController.php:181-195` | ✅ |
| 5 | `coupon/create` | **يعمل كوبون خصم مفتوح للكل** بالنسبة اللي بده ياها، وبيقبله الدفع | `CouponController.php:31-38` + `Requests/CouponRequest.php` | ✅ |
| 6 | `coupon/update/{coupon}` | **يعدّل أي كوبون**، حتى كوبونات الأدمن (النسبة والكود والتواريخ) | `CouponController.php:60-63` | ✅ |
| 7 | `pos/get-customers` | **قائمة أسماء كل الزبائن** دفعة وحدة | `PosController.php:29-33` | ✅ |
| 8 | `pos/get-shipping_address/{id}` | **عناوين وهاتف وموقع أي زبون** برقم حسابه | `PosController.php:66-70` | ✅ |
| 9 | `pos/create-shipping-address` | **يضيف عنوان بحساب أي زبون** | `PosController.php:88-98` | ✅ |
| 10 | `pos/delete-cart/{id}` | **يحذف منتجات من عربة أي زبون** | `PosController.php:162-166` | ✅ |
| 11 | `shop-verify-info-store` | **يرفع ملف لمجلد عام** على الموقع (`public/uploads/verification_form`) قبل ما يتأكد إنه عنده متجر. نموذج التحقق الحالي فيه خانة ملف، فهي قابلة للاستغلال | `ShopController.php:257-281` + `config/filesystems.php` (القرص المحلي = مجلد `public`) | ✅ |
| 12 | `digital-products/edit/{id}` | **يقرأ تفاصيل أي منتج** حتى غير المنشور، مع **سعر التكلفة** | `DigitalProductController.php:87-93` | ✅ |
| 13 | `wholesale-product/edit/{id}` | يقرأ تفاصيل أي منتج: سعر التكلفة، المخزون، الباركود | `WholesaleProductController.php:69-74` | من الفاحص |

**ملاحظة عن المجلد العام:** بأرشيف `public` اللي وصلنا كان فيه ملفات PHP مشبوهة داخل `public/uploads` (أسماء متل `xannyanaxium.php` و`coffexium.php`)، وهي شكل ملفات اختراق. ما بقدر أثبت إنها إجت من هالروابط تحديدًا، بس رفع ملفات لمجلد عام بدون تحقق هو نفس النوع من الثغرات. **يستاهل فحص سيرفر اللايف.**

## 2. خطيرة بالكود، بس ما بتشتغل هلق (الجداول مو موجودة أو الميزة مطفية)
بتصير خطيرة **إذا انفعّلت الميزة بالمستقبل**.

| الرابط | المشكلة | ليش مو شغّالة هلق |
|---|---|---|
| `seller-package/free-package` | تاجر بياخد باقة مدفوعة ببلاش (الفحص على رقم والتنفيذ على رقم ثاني) | جدول الباقات مو موجود |
| `conversations/message/store` | تاجر بيكتب رسائل بمحادثات تجار ثانيين (فحص المحادثة بيتجاهل رقمها) | نظام المحادثات مطفي وما في محادثات |
| `refunds/reject` | أي حساب بيكتب «سبب رفض» على أي طلب استرجاع | جدول الاسترجاع مو موجود |
| `auction-product-bids/edit/{id}` و`/destroy/{id}` | كشف بيانات المزايدين (اسم وإيميل وهاتف) وحذف مزايداتهم | جدول المزايدات مو موجود |

## 3. أخطاء بسيطة (بتعطي خطأ 500، بدون كشف بيانات)
- `orders/items/{id}`: رقم طلب مو للتاجر بيعطي 500 بدل «غير موجود».
- `dashboard/dashboard-counters`: الرابط بيأشّر على دالة مو موجودة.
- روابط الجملة والمزادات (إنشاء وتعديل وحذف): بتعطي 500 لأنه في ملفات ناقصة بالمشروع. **إذا حدا رجّع هالملفات بدون فحص الملكية، بتصير خطيرة.**
- روابط نقطة البيع (إضافة للعربة وإنشاء طلب): بتعطي 500 لأنه في ملف ناقص (`PosUtility`).

## 4. للتجار نفسهم (بعد ما ينضاف شرط «لازم يكون تاجر»)
هدول بيضلوا مفتوحين **لتاجر ضد تاجر ثاني**، ولازم يتصلّحوا قبل التطبيق الرسمي:
- النقاط 1 و2 و3 و6 و12 و13 فوق: تاجر بيقدر يعدّل أو يحذف أو يقرأ منتجات وكوبونات غيره.
- `coupon/create`: تاجر بيعمل كوبون على منتجات غيره.
- `pos/get-customers` و`pos/get-shipping_address`: تاجر بيشوف بيانات كل الزبائن.
- `products/add`: تاجر بيقدر يحط على منتجه إشارات للأدمن بس (مميز، عرض اليوم، تقييم).
- رفع الملفات (`file/upload`): الملفات بتنحفظ بمجلد عام، ومسموح SVG، وما في حد للحجم.

## 5. اللي طلع سليم
- **روابط الطلبات** (`orders`، `orders/details`): محصورة بطلبات التاجر نفسه.
- **تغيير حالة الطلب** (`orders/update-delivery-status`): بيرفض كل شي (من تاسك حالات التاجر).
- **تغيير الدفع** (`orders/update-payment-status`): للمحاسب والأدمن الرئيسي بس.
- **أسئلة المنتجات، والسحب، والملف الشخصي، وإحصائيات لوحة التاجر:** محصورة بالشخص نفسه، أو بترفض الزبون.

## كيف انعمل الفحص
- قراءة كل الروابط (حوالي 90 رابط بـ 16 ملف) بملف `routes/api_seller.php`، والكود اللي وراها.
- الحالات الخطيرة بالقسم 1 تأكدت منها بنفسي بالكود (علامة ✅)، وتأكدت من وجود جداولها وعدد صفوفها على نسخة محلية من قاعدة اللايف.
- **ما انعمل أي اختبار هجوم فعلي**، ولا على أي سيرفر.
