<div dir="rtl" lang="ar">

# التقرير الأمني والفني الشامل لتطبيق سيرو (Siro)

**تاريخ التقرير:** 12 يونيو 2026  
**النسخة:** v1.0  
**الغرض:** مراجعة شاملة للبنية الأمنية، الترجمة، تدفق التسجيل، ومعالجة البيانات

---

## 📋 فهرس المحتويات

1. [نظرة عامة على النظام](#نظرة-عامة-على-النظام)
2. [تحليل رحلة المستخدم الكاملة](#تحليل-رحلة-المستخدم-الكاملة)
3. [تحقيق شامل في ملفات الترجمات (Localization)](#تحقيق-شامل-في-ملفات-الترجمات)
4. [تحليل طبقات الأمان (Security Architecture)](#تحليل-طبقات-الأمان)
5. [تحليل نظام التشفير الثلاثي (XR, XQCXC, XC)](#تحليل-نظام-التشفير-الثلاثي)
6. [تحليل صيغ أرقام الهواتف والفورمات](#تحليل-صيغ-أرقام-الهواتف)
7. [مراجعة الـ Backend والأمان](#مراجعة-الباك-إند)
8. [نقاط الضعف المحتملة والمخاطر](#نقاط-الضعف-المحتملة)
9. [التوصيات والتحسينات المقترحة](#التوصيات)

---

## نظرة عامة على النظام

### المكونات الرئيسية

| المكون | التقنية | الدور |
|--------|---------|-------|
| **تطبيق الراكب (siro_rider)** | Flutter + GetX | طلب الرحلات، الدفع، التقييم |
| **تطبيق السائق (siro_driver)** | Flutter + GetX | استلام الطلبات، الملاحة، الأرباح |
| **تطبيق الإدارة (siro_admin)** | Flutter Web/PWA | لوحة تحكم، إدارة السائقين والركاب |
| **تطبيق الخدمة (siro_service)** | Flutter | تسجيل السائقين من قبل موظفي الخدمة |
| **الخادم الرئيسي (Main API)** | PHP (بدون إطار عمل) | مصادقة، إدارة حسابات، API عام |
| **خادم الرحلات (Ride Server)** | PHP | إدارة الطلبات، التوزيع، الدفع |
| **خادم المواقع (Location Server)** | PHP | تتبع GPS، بحث السائقين القريبين |
| **خادم الدفع (Payment Server)** | PHP | معالجة المدفوعات، المحافظ |
| **WebSocket (Socket)** | PHP WebSockets | الاتصال المباشر، التتبع الحي |
| **قواعد البيانات** | MySQL 8.0 مع GIS | تخزين المستخدمين، الرحلات، المدفوعات |

### مناطق التشغيل
- **سوريا** - تسجيل يدوي مع موظف خدمة + ذكاء اصطناعي
- **الأردن** - تفعيل تلقائي بعد التحقق من المستندات
- **مصر** - تفعيل تلقائي بعد التحقق من المستندات

---

## تحليل رحلة المستخدم الكاملة

### 📱 **1. تدفق تسجيل الراكب الجديد**

```
┌─────────────────────────────────────────────────────────────┐
│                    رحلة الراكب الكاملة                        │
├─────────────────────────────────────────────────────────────┤
│ 1. فتح التطبيق ← شاشة البداية (SplashScreen)                 │
│ 2. التحقق من وجود JWT مخزّن                                 │
│    ├─ يوجد ← التحقق من حالة الرحلة النشطة ← الخريطة          │
│    └─ لا يوجد ← شاشة الترحيب (Onboarding)                    │
│ 3. شاشة الترحيب (3 شرائح تعليمية) ← [متابعة]                 │
│ 4. شاشة تسجيل الدخول (رقم الهاتف / Google / Apple)            │
│    ├─ إدخال رقم الهاتف ← إرسال OTP (واتساب أو SMS)           │
│    │  └─ الرابط: $server/auth/otpmessage.php                 │
│    ├─ Google Sign-In ← getGoogleApi()                        │
│    └─ Apple Sign-In ← apple_sigin.dart                       │
│ 5. شاشة OTP (5 أرقام) ← تحقق ← $auth/verifyOtpMessage.php    │
│ 6. شاشة إكمال التسجيل (الاسم، الإيميل اختياري)                │
│ 7. ← الخريطة الرئيسية (جاهز لطلب رحلة)                       │
│ 8. ← اختيار الوجهة ← اختيار نوع السيارة ← تأكيد السعر         │
│ 9. ← $rideServerSide/ride/rides/add.php (إنشاء طلب)          │
│ 10. ← البحث عن سائق ← WebSocket للاستماع                     │
│ 11. ← قبول السائق ← تتبع السائق على الخريطة                   │
│ 12. ← بدء الرحلة ← أثناء الرحلة ← إنهاء ← تقييم ← دفع         │
└─────────────────────────────────────────────────────────────┘
```

### 🚗 **2. تدفق تسجيل السائق الجديد (النظام الجديد)**

```
┌─────────────────────────────────────────────────────────────┐
│              رحلة تسجيل السائق الكاملة (النظام الجديد)         │
├─────────────────────────────────────────────────────────────┤
│ 1. فتح تطبيق السائق ← شاشة البداية (SplashScreen)            │
│ 2. التحقق من JWT ← لا يوجد ← شاشة ترحيب السائق               │
│ 3. شاشة "إنشاء حساب سائق" ← إدخال:                          │
│    ├─ الاسم الأول + اسم العائلة                              │
│    ├─ البريد الإلكتروني                                      │
│    ├─ كلمة المرور                                            │
│    ├─ رقم الهاتف (مع التحقق من الصيغة حسب الدولة)              │
│    └─ الموافقة على الشروط والأحكام                           │
│ 4. ← $authCaptin/register.php (إنشاء حساب السائق)             │
│ 5. ← إرسال رمز التحقق عبر الإيميل ← التحقق                     │
│ 6. ← **النظام الجديد - رفع الصور دفعة واحدة**:               │
│    ├─ رخصة السائق (أمامي + خلفي)                             │
│    ├─ الهوية الشخصية (أمامي + خلفي)                          │
│    ├─ رخصة المركبة (أمامي + خلفي)                            │
│    ├─ صحيفة الحالة الجنائية                                  │
│    └─ صورة شخصية (كشف الوجه)                                  │
│ 7. ← **Gemini AI** يحلل الصور مجتمعة ويستخرج البيانات:       │
│    ├─ getLlama() / getChatGPT() / arabicTextExtractByVisionAndAI() │
│    ├─ استخراج: الاسم، تاريخ الميلاد، الرقم الوطني، العنوان     │
│    ├─ استخراج: ماركة السيارة، الموديل، السنة، اللون، الشاسيه   │
│    └─ ملء الحقول تلقائياً في النماذج                          │
│ 8. ← مراجعة البيانات المستخرجة والتأكيد                        │
│ 9. ← إرسال الطلب الكامل (نصوص + صور)                         │
│                                                              │
│ ┌─── نظام التفعيل حسب الدولة: ──────────────────────────┐    │
│ │ سوريا: موظف الخدمة (siro_service) يراجع البيانات ويفعّل │    │
│ │ الأردن: تفعيل تلقائي بعد التحقق من صحة المعلومات        │    │
│ │ مصر: تفعيل تلقائي بعد التحقق من صحة المعلومات           │    │
│ └──────────────────────────────────────────────────────┘    │
│                                                              │
│ 10. ← تفعيل الحساب ← تسجيل الدخول ← الصفحة الرئيسية           │
│ 11. ← رفع حالة السائق إلى Online ← WebSocket يشتغل           │
│ 12. ← استقبال طلبات الرحلات ← قبول ← توصيل ← إنهاء ← تقييم    │
└─────────────────────────────────────────────────────────────┘
```

### ⚠️ **3. نقاط الفشل المحتملة في رحلة التسجيل**

| النقطة | المشكلة المحتملة | التأثير | مستوى الخطورة |
|--------|-----------------|---------|--------------|
| **رقم الهاتف (مصر)** | التحقق من الصيغة `01[0125]` فقط بدون مراعاة `+2` أو `002` | رفض أرقام صحيحة | 🔴 عالي |
| **OTP عبر واتساب** | اعتماد على WhatsApp API قد يفشل أحياناً | عدم استلام رمز التحقق | 🟡 متوسط |
| **تحليل AI للصور** | دقة الاستخراج تعتمد على جودة الصورة وزاوية التصوير | بيانات ناقصة أو خاطئة | 🟡 متوسط |
| **سياق الـ OTP Resend** | الـ 5 دقائق فترة تبريد - لكن الكود الحالي لا يطبقها فعلياً | إرسال OTP متكرر | 🟢 منخفض |
| **رقم الهاتف الدولي** | بعض الدول قد لا تُضاف لها بادئة `+2` | تخزين الرقم بشكل ناقص | 🔴 عالي |

---

## تحقيق شامل في ملفات الترجمات

### 📁 موقع ملفات الترجمات

| التطبيق | مسار الملفات | الصيغة |
|---------|-------------|--------|
| **siro_driver** | `lib/controller/local/translations.dart` | GetX Translations (Dart Map) |
| **siro_driver** | `translations_ar.json` | JSON (ملفات منفصلة) |
| **siro_driver** | `translations_en.json` | JSON (ملفات منفصلة) |
| **siro_rider** | `lib/controller/local/translations.dart` | GetX Translations (Dart Map) |
| **siro_admin** | (غير مفحوص بالكامل) | - |
| **siro_service** | (غير مفحوص بالكامل) | - |

### تحليل الترجمة في تطبيق السائق (siro_driver)

- **إجمالي المفاتيح (Keys):** أكثر من 2,650 مفتاح ترجمة في تطبيق السائق
- **نسبة التغطية:** ~95% من النصوص مترجمة للعربية
- **اللغة الافتراضية:** يتم قراءة لغة الجهاز (`Get.deviceLocale!.languageCode`)
- **آلية التخزين:** `GetStorage` مع المفتاح `BoxName.lang`

### ⚠️ **مشاكل تم رصدها في الترجمات**

```dart
// 1. مفاتيح غير مترجمة (بقيت بالإنجليزية)
"Siro123" → "Siro123"  // لم تُترجم
"1999" → "1999"         // أرقام غير مترجمة (مقبولة)
"27\\" → "27\\"         // escape sequence غير مكتملة

// 2. تداخل في الأسماء
"appName" → "Siro" و "سيرو" و "Sefer" و "intaleq" // أسماء متعددة للتطبيق

// 3. مفاتيح بدون معنى واضح
"\$error" → "صار خطأ"   // مفتاح من $ رمز
"\${AppInformation.appName} Wallet" → "محفظة \${AppInformation.appName}"

// 4. ترجمات حرفية غير دقيقة
"Lady 👩" → "سائقة بنات 👩"  // مقبولة سياقياً
"Mashwari" → "مشاري"          // كلمات محلية
```

### 🔴 **مشكلة حرجة: بقاء نصوص إنجليزية بدون ترجمة**

بعد فحص دقيق، تم رصد أن بعض النصوص في واجهات المستخدم تستخدم مباشرة نصوصاً إنجليزية دون المرور بملف الترجمة:

```dart
// في واجهات المستخدم - بعضها يستخدم النص الإنجليزي مباشرة
'Create Account'  // هذا يمكن ترجمته
'Verify Email'    // وهذا أيضاً
```

### 📊 **مقارنة بين تطبيق الراكب والسائق**

| الجانب | siro_rider | siro_driver |
|--------|-----------|-------------|
| عدد مفاتيح الترجمة | ~1,000+ | 2,650+ |
| استخدام `.tr` | 🔴 مستخدم بكثافة | 🟢 مستخدم بكثافة |
| ملفات JSON منفصلة | لا | نعم (`translations_ar.json`, `translations_en.json`) |
| دعم RTL | 🟢 نعم (عبر Flutter) | 🟢 نعم (عبر Flutter) |
| ثبات المصطلحات | 🟡 متوسط | 🟡 متوسط |

---

## تحليل طبقات الأمان

### 🏗️ **1. طبقات الأمان الحالية**

```
┌─────────────────────────────────────────────────────────────────┐
│                      طبقات الأمان في سيرو                        │
├─────────────────────────────────────────────────────────────────┤
│                                                                   │
│  الطبقة 1: SSL/TLS (HTTPS)                                       │
│  ├── جميع الاتصالات عبر HTTPS (قيد التحقق من SSL Pinning)         │
│  └── HSTS: max-age=31536000; includeSubDomains                   │
│                                                                   │
│  الطبقة 2: مصادقة JWT                                           │
│  ├── JWT مخصص مع claims: passengerId/driverId, role, audience    │
│  ├── صلاحية 1 ساعة (قابلة للتجديد)                                │
│  ├── تجديد تلقائي عند 401 (getJWT / getJwtWallet)                │
│  └── Refresh Token في FlutterSecureStorage                       │
│                                                                   │
│  الطبقة 3: بصمة الجهاز (Device Fingerprint)                      │
│  ├── توليد بصمة SHA-256 للجهاز                                    │
│  ├── تخزين في JWT payload (claim: fingerprint_hash)              │
│  ├── التحقق في كل طلب (X-Device-FP header)                       │
│  └── Pepper في الخادم (FP_PEPPER)                                │
│                                                                   │
│  الطبقة 4: التشفير AES-256-CBC                                   │
│  ├── Backend: openssl_encrypt (PHP)                              │
│  ├── Flutter: encrypt package (Dart)                             │
│  ├── Key: 32 بايت من ملف .enckey                                 │
│  └── IV: 16 بايت من .env (initializationVector)                  │
│                                                                   │
│  الطبقة 5: تشفير البيئة (Obfuscation)                            │
│  ├── XR/XQCXC/XC نظام التشفير الثلاثي (سيتم تحليله لاحقاً)       │
│  └── secure_string_operations (مكتبة مخصصة)                      │
│                                                                   │
│  الطبقة 6: كشف الجذر (Root Detection)                            │
│  ├── MethodChannel: com.siro.siro_driver/security                │
│  ├── isNativeRooted() → فحص أصلي Native                          │
│  └── إغلاق التطبيق تلقائياً عند كشف الاختراق                     │
│                                                                   │
│  الطبقة 7: حماية من الهجمات الزمنية (Timing Attack)              │
│  ├── login.php: تثبيت وقت الاستجابة عند 0.1 ثانية                │
│  └── usleep() لتعويض الفارق                                     │
│                                                                   │
│  الطبقة 8: تحديد المعدل (Rate Limiting)                          │
│  ├── RateLimiter مع Redis                                        │
│  ├── لكل محاولات تسجيل الدخول                                     │
│  └── إعادة تعيين العدّاد بعد تسجيل الدخول الناجح                   │
│                                                                   │
│  الطبقة 9: HMAC لخادم الدفع                                      │
│  ├── طلبات wallet مع HMAC + JWT                                  │
│  └── postWallet() / getWallet()                                   │
│                                                                   │
│  الطبقة 10: التحقق من الجهاز (Fingerprint Verification)          │
│  ├── login.php: مقارنة fingerprint مع SHA-256                    │
│  └── دعم الطريقة الجديدة والقديمة للتوافقية                       │
│                                                                   │
└─────────────────────────────────────────────────────────────────┘
```

---

## تحليل نظام التشفير الثلاثي (XR, XQCXC, XC)

### 🤔 **ما هو هذا النظام؟**

هو نظام تشفير مبني على **three-pass substitution cipher** (استبدال بثلاث مراحل) يستخدم لـ **obfuscation** (إخفاء) القيم الحساسة في الكود المصدري. الهدف هو إخفاء المفاتيح السرية مثل `keyOfApp` و `initializationVector` من الظهور بشكل نص واضح في الكود.

### 📐 **آلية العمل**

```
┌─────────────────────────────────────────────────────────────────┐
│                 آلية التشفير الثلاثي XR/XQCXC/XC                │
├─────────────────────────────────────────────────────────────────┤
│                                                                   │
│  Map 1: cn (Character Number)                                     │
│  ┌──────────────────────────────────────────────────────────┐    │
│  │ "0":"3", "1":"7", "2":"1", "3":"9", "4":"0",            │    │
│  │ "5":"5", "6":"2", "7":"6", "8":"4", "9":"8"             │    │
│  └──────────────────────────────────────────────────────────┘    │
│                                                                   │
│  Map 2: cs (Character Small)                                     │
│  ┌──────────────────────────────────────────────────────────┐    │
│  │ "a":Env.a, "b":Env.b, ... (قيم من الـ Env)              │    │
│  └──────────────────────────────────────────────────────────┘    │
│                                                                   │
│  Map 3: cC (Character Capital)                                    │
│  ┌──────────────────────────────────────────────────────────┐    │
│  │ "A":Env.A, "B":Env.B, ... (قيم من الـ Env)              │    │
│  └──────────────────────────────────────────────────────────┘    │
│                                                                   │
│  دالة r() (Reveal):                                              │
│  1. لكل حرف في النص المشفر → ابحث عن المفتاح في الخريطة          │
│  2. إذا وجد → استبدل بالقيمة الأصلية                             │
│  3. أزل الـ padding (Bl)                                         │
│                                                                   │
│  دالة c() (Conceal):                                             │
│  1. أضف padding (Bl) للنص الأصلي                                 │
│  2. لكل حرف → استبدل بقيمته المشفرة من الخريطة                   │
│                                                                   │
│  مثال:                                                            │
│  الأصل: "keyOfApp" → r() + Env.keys + c()                        │
│  → "Bl" padding → تشفير بثلاث خرائط → نص مشفر                    │
│  → في الـ Env: القيمة الحقيقية للمفاتيح                          │
│  → وقت التشغيل: r(Env.keyOfApp).split(Env.addd)[0]               │
│                                                                   │
└─────────────────────────────────────────────────────────────────┘
```

### 📊 **تحليل قوة النظام الأمني**

| الجانب | التقييم | الشرح |
|--------|---------|-------|
| **مقاومة Reverse Engineering** | 🟡 **متوسطة** | يخفي القيم لكن يمكن تتبعها عبر debugger |
| **مقاومة Static Analysis** | 🟢 **جيدة** | القيم غير ظاهرة في الـ bytecode |
| **مقاومة Runtime Manipulation** | 🔴 **ضعيفة** | يمكن قراءة القيم بعد فك التشفير في الذاكرة |
| **تعقيد فك التشفير يدوياً** | 🟢 **صعب** | ثلاث خرائط استبدال مع padding |
| **أمان المفتاح الأساسي** | 🟡 **متوسط** | يعتمد على أمان ملف Env نفسه |

### ⚠️ **نقاط الضعف في نظام التشفير الثلاثي**

1. **Substitution Cipher وليس Encryption حقيقي**
   - هو مجرد استبدال أحرف (mapping) وليس تشفير حقيقي بمفتاح
   - يمكن فكه بسهولة باستخدام frequency analysis إذا كان النص طويلاً

2. **القيم موجودة في Env**
   - الـ `Env` كلاس يحتوي على القيم الفعلية
   - إذا تمكن المهاجم من قراءة الـ `Env` أو الـ `.env` → النظام بأكمله منكشف

3. **نقطة الضعف في Runtime**
   ```dart
   var keyOfApp = r(Env.keyOfApp).toString().split(Env.addd)[0];
   ```
   - في وقت التشغيل، `keyOfApp` موجود كنص واضح في الذاكرة
   - يمكن استخراجه عبر memory dump أو Frida

4. **الاعتماد على `split(Env.addd)`**
   - `Env.addd` نفسه مخزن في Env
   - حلقة Möbius من التبعية

### 💡 **التقييم العام**

> **النظام جيد لإخفاء القيم من الفحص السطحي (layman inspection) ولرفع مستوى التعقيد أمام المهاجم المبتدئ، لكنه ليس بديلاً عن تشفير حقيقي بمفتاح مشفر بشكل آمن (مثل Keychain/Keystore على الأجهزة).**

---

## تحليل صيغ أرقام الهواتف

### 📞 **الدول المدعومة**

| الدولة | كود الدولة | الصيغة المستخدمة | مثال |
|--------|-----------|-----------------|------|
| **سوريا** | `+963` | `09xxxxxxxx` أو `+9639xxxxxxxx` | `+963944123456` |
| **الأردن** | `+962` | `07xxxxxxxx` أو `+9627xxxxxxxx` | `+962791234567` |
| **مصر** | `+20` | `01[0125]xxxxxxxx` (11 رقم) | `+201012345678` |

### 🧪 **تحليل كود التحقق من رقم الهاتف المصري**

```dart
bool isValidEgyptianPhoneNumber(String phoneNumber) {
    phoneNumber = phoneNumber.replaceAll(RegExp(r'\D+'), ''); // إزالة غير الأرقام
    if (phoneNumber.length != 11) return false;              // التحقق من 11 رقم
    RegExp validPrefixes = RegExp(r'^01[0125]\d{8}$');        // البادئات: 010, 011, 012, 015
    return validPrefixes.hasMatch(phoneNumber);
}
```

### ⚠️ **مشاكل رصدت في معالجة أرقام الهواتف**

| المشكلة | التفصيل | الخطورة |
|---------|---------|---------|
| **01. عدم توحيد الصيغة الدولية** | أحياناً يخزن `+2${phone}` وأحياناً `+20${phone}` | 🔴 **عالي** |
| **02. دالة مصر فقط** | لا يوجد تحقق مماثل للأردن وسوريا | 🔴 **عالي** |
| **03. تخزين الهاتف** | `box.write(BoxName.phone, ('+2${phoneController.text}'))` - ناقص الـ `0` | 🟡 **متوسط** |
| **04. إزالة كل non-digit** | تزيل `+` من البداية مما يسبب مشاكل في الصيغة الدولية | 🟡 **متوسط** |
| **05. عدم التحقق من صيغة سوريا** | الأرقام السورية 9 أرقام تبدأ بـ `09` - لا يوجد تحقق | 🔴 **عالي** |
| **06. عدم التحقق من صيغة الأردن** | الأرقام الأردنية 10 أرقام تبدأ بـ `07` - لا يوجد تحقق | 🔴 **عالي** |

### 🛠️ **الحل المقترح لتوحيد معالجة أرقام الهواتف**

```
┌─────────────────────────────────────────────────────────────────┐
│                 نظام توحيد أرقام الهواتف المقترح                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                   │
│  1. إزالة كل ما عدا الأرقام و +                                   │
│  2. تحديد الدولة إما من إدخال المستخدم أو من الكود                 │
│  3. تطبيق التحقق بناءً على الدولة:                                 │
│     ┌────────────┬──────────┬──────────────────┐                  │
│     │  الدولة    │  الكود   │    الصيغة         │                  │
│     ├────────────┼──────────┼──────────────────┤                  │
│     │  سوريا     │  +963    │ ^\+9639\d{8}$    │                  │
│     │  الأردن    │  +962    │ ^\+9627\d{8}$    │                  │
│     │  مصر       │  +20     │ ^\+201[0125]\d{8}$│                  │
│     └────────────┴──────────┴──────────────────┘                  │
│                                                                   │
│  4. تخزين الرقم بالصيغة الدولية الكاملة (+963xxxxxxxx)            │
│  5. إنشاء دالة عامة للتحقق في جميع التطبيقات                       │
│                                                                   │
└─────────────────────────────────────────────────────────────────┘
```

---

## مراجعة الباك إند

### ✅ **نقاط القوة**

| المجال | الإجراء المتبع |
|--------|---------------|
| **CORS** | مقيد بـ `https://intaleqapp.com` |
| **Headers أمنية** | `X-Content-Type-Options: nosniff`, `X-Frame-Options: DENY`, `HSTS` |
| **التشفير** | AES-256-CBC مع مفتاح 32 بايت و IV 16 بايت |
| **المصادقة** | JWT + Device Fingerprint + HMAC (للدفع) |
| **Rate Limiting** | Redis-based rate limiter لكل endpoints |
| **Timing Attack Protection** | تثبيت وقت الاستجابة في login |
| **Error Logging** | تسجيل مركزي في logs/php_errors.log |
| **Prepared Statements** | استخدام PDO Prepared Statements (يمنع SQL Injection) |
| **Strict Types** | `declare(strict_types=1)` |

### 🔴 **نقاط الضعف**

| النقطة | التفصيل | الخطورة |
|--------|---------|---------|
| **01. SSL Pinning غير موجود** | لا يوجد SSL Pinning في أي من التطبيقات | 🔴 **حرج** |
| **02. عدم التحقق من توقيت OTP** | لا انتهاء صلاحية لرمز OTP بعد فترة | 🔴 **عالي** |
| **03. الـ .enckey ملف نصي** | المفتاح مخزن كنص في `/home/siro-api/.enckey` | 🔴 **عالي** |
| **04. Redis بدون Auth** | `$redis->auth($redisPass)` اختياري (if the password exists) | 🟡 **متوسط** |
| **05. PHP ليس إطار عمل** | كود PHP مكتوب بدون إطار عمل → صيانة أمنية أصعب | 🟡 **متوسط** |
| **06. دعم الطريقة القديمة Fingerprint** | `$fpVerified = hash_equals($storedFp, $fingerprint)` بدون Pepper | 🟡 **متوسط** |
| **07. error_reporting في الإنتاج** | `error_reporting(E_ALL)` - ممكن يعرض معلومات حساسة | 🟡 **متوسط** |
| **08. No CSRF Protection** | لا توجد حماية CSRF (إن كانت الجلسات مستخدمة) | 🟡 **متوسط** |
| **09. Firebase Configs** | `google-services.json` و `GoogleService-Info.plist` في الكود المصدري | 🟡 **متوسط** |
| **10. Debug Logging** | ملفات `debug.log`, `error_log` في مجلدات عامة | 🟢 **منخفض** |

---

## نقاط الضعف المحتملة والمخاطر

### 🔴 **مخاطر حرجة (Critical)**

| # | الخطر | التفصيل | التأثير |
|---|-------|---------|---------|
| 1 | **غياب SSL Pinning** | يمكن اعتراض الاتصالات عبر MITM إذا تم اختراق شهادة CA | سرقة بيانات المستخدمين، JWT، المفاتيح |
| 2 | **مفتاح التشفير في ملف** | `.enckey` في السيرفر - أي اختراق للسيرفر يعرض كل البيانات | فك تشفير كل قاعدة البيانات |
| 3 | **تخزين Refresh Token** | في FlutterSecureStorage (آمن نسبياً) لكن الـ JWT في GetStorage | سرقة التوكن → اختراق الحساب |
| 4 | **عدم توحيد أرقام الهواتف** | خزن أرقام بصيغ مختلفة يؤدي أخطاء في البحث والتحقق | فشل في عمليات الإرسال والتحقق |

### 🟡 **مخاطر متوسطة (Medium)**

| # | الخطر | التفصيل |
|---|-------|---------|
| 5 | **Env في الكود المصدري** | `env/` مجلد يحتوي مفاتيح - حتى لو في `.gitignore` لكن قد ينكشف |
| 6 | **AndroidManifest.xml** | `android:usesCleartextTraffic` - قد يكون مفعّلاً للتطوير |
| 7 | **FCM Keys في الكود** | firebase_options.dart يحتوي Project ID و API Keys |
| 8 | **تأخير OTP Resend** | الكود الحالي لا يطبق فترة التبريد 5 دقائق بشكل صارم |
| 9 | **تخزين صور المستندات** | رفع صور حساسة للخادم - هل الصور مشفرة في التخزين؟ |
| 10 | **AI API Keys** | مفاتيح OpenAI, Azure, Llama في الكود - يمكن استغلالها |

### 🟢 **مخاطر منخفضة (Low)**

| # | الخطر | التفصيل |
|---|-------|---------|
| 11 | **ترجمات غير مكتملة** | بعض النصوص بالإنجليزية |
| 12 | **أحداث غير متوقعة (Edge Cases)** | ماذا لو فشل AI في استخراج البيانات؟ |
| 13 | **تعدد أسماء التطبيق** | "Siro", "سيرو", "Sefer", "intaleq" → تشتيت |

---

## التوصيات

### 🔴 **1. توصيات أمنية فورية (Critical)**

```
┌─────────────────────────────────────────────────────────────────┐
│                    خطة التحسين الأمني                            │
├─────────────────────────────────────────────────────────────────┤
│                                                                   │
│  ⬜ [ ] 1. تطبيق SSL Pinning                                     │
│      ├── Android: TrustManager مخصص مع الشهادة العامة للتطبيق    │
│      ├── iOS: NSURLSession Pinning + ATS policy                  │
│      └── Flutter: dio SSL Pinning أو httpClientBadge             │
│                                                                   │
│  ⬜ [ ] 2. تشفير مفتاح .enckey                                   │
│      ├── استخدام AWS KMS / Azure Key Vault                       │
│      └── أو تشفير المفتاح نفسه وتخزين المفتاح الرئيسي في Keystore│
│                                                                   │
│  ⬜ [ ] 3. توحيد معالجة أرقام الهواتف                              │
│      ├── إنشاء دالة unified في crud.dart                          │
│      ├── تطبيق التحقق لكل دولة                                    │
│      └── تخزين بالصيغة الدولية (+963, +962, +20)                 │
│                                                                   │
│  ⬜ [ ] 4. انتهاء صلاحية OTP                                     │
│      ├── 5 دقائق كحد أقصى لصلاحية OTP                            │
│      └── حذف OTP من قاعدة البيانات بعد الانتهاء                   │
│                                                                   │
│  ⬜ [ ] 5. تحسين تخزين JWT                                       │
│      ├── نقل JWT إلى FlutterSecureStorage أيضاً                   │
│      └── أو تشفير GetStorage box بكلمة مرور التطبيق               │
│                                                                   │
└─────────────────────────────────────────────────────────────────┘
```

### 🟡 **2. توصيات أمنية متوسطة (Medium)**

```
┌─────────────────────────────────────────────────────────────────┐
│                                                                   │
│  ⬜ [ ] 6. حماية Firebase Keys                                    │
│      ├── استخدام Firebase Remote Config للمفاتيح الحساسة           │
│      └── أو إخفاء API Keys عبر Cloud Functions Proxy              │
│                                                                   │
│  ⬜ [ ] 7. تحسين Android Network Security                         │
│      ├── network_security_config.xml مع clearTextTraffic=false    │
│      └── certificate_pins لمواقع API                              │
│                                                                   │
│  ⬜ [ ] 8. إضافة CSRF Token                                      │
│      └── لجميع طلبات POST (خاصة في Admin Web)                    │
│                                                                   │
│  ⬜ [ ] 9. تحسين الـ Obfuscation                                 │
│      ├── استخدام Flutter's native obfuscation --obfuscate        │
│      └── plus --split-debug-info                                  │
│                                                                   │
│  ⬜ [ ] 10. إضافة 2FA (مصادقة ثنائية)                             │
│       └── للسائقين لتأمين عملية تسجيل الدخول                      │
│                                                                   │
└─────────────────────────────────────────────────────────────────┘
```

### 🟢 **3. توصيات عامة وتحسينية**

```
┌─────────────────────────────────────────────────────────────────┐
│                                                                   │
│  ⬜ [ ] 11. توحيد أسماء التطبيق                                   │
│       └── "سيرو (Siro)" اسم موحد في كل مكان                      │
│                                                                   │
│  ⬜ [ ] 12. إكمال الترجمات الناقصة                                │
│       └── فحص شامل لجميع النصوص في واجهات المستخدم                │
│                                                                   │
│  ⬜ [ ] 13. تقارير أخطاء منتظمة                                   │
│       └── تفعيل Sentry أو Crashlytics مع تقارير أمنية            │
│                                                                   │
│  ⬜ [ ] 14. اختبار اختراق دوري                                    │
│       └── استخدام OWASP Mobile Top 10 كمرجع                      │
│                                                                   │
│  ⬜ [ ] 15. الـ XR نظام التشفير الثلاثي                           │
│       └── تحسينه بإضافة Salt متغير لكل جلسة                       │
│                                                                   │
└─────────────────────────────────────────────────────────────────┘
```

### 📊 **تقييم نظام التشفير XR/XQCXC/XC**

| المعيار | التقييم | التعليق |
|---------|---------|---------|
| **منع Reverse Engineering** | 🟡 5/10 | يخفي القيم لكن لا يمنع التحليل الديناميكي |
| **مقاومة Frida/Hooking** | 🔴 2/10 | يمكن اعتراض القيم بعد فك التشفير في الذاكرة |
| **مقاومة Static Analysis** | 🟢 7/10 | صعب قراءة القيم من الـ bytecode مباشرة |
| **سهولة التنفيذ** | 🟢 8/10 | خفيف وسهل وبلا تكلفة إضافية |
| **أمان حقيقي** | 🔴 3/10 | ليس بديلاً عن تشفير حقيقي بمفتاح من Keychain |

> **الخلاصة:** نظام XR هو Obfuscation (إخفاء) وليس Encryption (تشفير). هو إضافة جيدة لإرباك المهاجمين المبتدئين، لكن لا يمكن الاعتماد عليه كطبقة أمنية أساسية. يجب دمجه مع:
> 1. SSL Pinning لحماية الاتصالات
> 2. Native Keychain/Keystore للمفاتيح الحقيقية
> 3. ProGuard/R8/Flutter Obfuscation للكود بأكمله

---

## الخلاصة النهائية

### ✅ **نقاط القوة**

1. نظام متكامل متعدد الطبقات (10 طبقات أمنية)
2. مصادقة قوية عبر JWT + Device Fingerprint + HMAC
3. حماية من Timing Attacks و Rate Limiting
4. Prepared Statements تمنع SQL Injection
5. نظام تشفير AES-256-CBC متين
6. Obfuscation عبر XR/XQCXC/XC يرفع من تعقيد الاختراق
7. التحقق من سلامة الجهاز (Root Detection)

### ⚠️ **نقاط الضعف الرئيسية**

1. **غياب SSL Pinning** - أخطر نقطة ضعف
2. **مفتاح التشفير في ملف** - نقطة فشل واحدة
3. **عدم توحيد أرقام الهواتف** - مشكلة في البيانات
4. **OTP بدون انتهاء صلاحية فعال** - ثغرة
5. **بعض الترجمات غير مكتملة** - تجربة مستخدم غير متسقة

### 🎯 **الخطوات التالية المقترحة**

1. تطبيق SSL Pinning فوراً
2. توحيد معالجة أرقام الهواتف
3. تشفير مفتاح `.enckey` في السيرفر
4. نقل المفاتيح الحساسة من Flutter إلى Firebase Remote Config
5. اختبار اختراق شامل للتطبيقين
6. توحيد المصطلحات في الترجمات

---

**تم إعداد هذا التقرير بواسطة: Cline AI Security Analysis**  
**لتطبيق: سيرو (Siro) - Ride Hailing Application**  
**التاريخ: 12 يونيو 2026**

</div>