Files
Siro/driver_auth_flow_corrected_analysis.md
2026-06-12 20:40:40 +03:00

5.2 KiB

تحليل تدفق السائق (Siro Driver) — النسخة المصححة


1. توضيح هام بخصوص connect.php

ملف backend/connect.php الحديث (يحتوي على الحماية)

// 1. Rate Limiting
$limiter = new RateLimiter($redis);
$limiter->enforce(RateLimiter::identifier(), 'api');

// 2. JWT Authentication
$jwtService = new JwtService($redis);
$decoded = $jwtService->authenticate();

أي ملف يستخدم require_once __DIR__ . '/../../connect.php' يكون محمياً تلقائياً بـ:

  • JWT Authentication (يتطلب Bearer token في Authorization header)
  • Rate Limiting (120 طلب/دقيقة)
  • Fingerprint verification عبر Pepper
  • HMAC Verification للطلبات الحساسة

2. قائمة الملفات وحالتها الفعلية

الملف يستخدم JWT Auth Rate Limiting الحالة
auth/captin/loginFromGoogle.php ../../connect.php آمن
auth/captin/loginUsingCredentialsWithoutGoogle.php ../../connect.php آمن
auth/captin/login.php ../../connect.php آمن
loginFirstTimeDriver.php core/bootstrap.php مدمج (password_verify) (5/دقيقة) آمن
loginJwtDriver.php core/bootstrap.php مدمج (HMAC) (5/دقيقة) آمن
auth/otp/verify.php core/bootstrap.php اختياري (JWT) لا يوجد آمن (تشفير داخلي)
auth/otp/request.php core/bootstrap.php اختياري لا يوجد آمن (تشفير داخلي)

الخلاصة: جميع ملفات Auth للسائق محمية بشكل صحيح.


3. تدفق الـ OTP الكامل مع التشفير

🧩 هيكل OTP في النظام

┌─────────────────────────┐          ┌───────────────────────────┐
│  Flutter (siro_driver)  │          │  PHP Backend              │
├─────────────────────────┤          ├───────────────────────────┤
│                         │          │                           │
│  sendOtpMessage():      │          │  backend/auth/otp/request.php  │
│  POST request.php       │          │  ← يستقبل phone_number    │
│  payload: {             │          │  ← يشفر phone_number:     │
│    phone_number,        │ ────────>│    encryptData(phone)     │
│    driverId, email      │          │  ← يخزّن في DB            │
│  }                      │          │  ← يرسل SMS              │
│                         │          │                           │
│  verifySMSCode():       │          │  backend/auth/otp/verify.php   │
│  POST verify.php        │          │  ← يستقبل phone_number +  │
│  payload: {             │          │    token_code             │
│    phone_number,        │ ────────>│  ← يشفر كليهما:           │
│    token_code           │          │    encryptData(phone)     │
│  }                      │          │    encryptData(token_code)← ✅  │
│                         │          │  ← يقارن مع DB            │
│                         │          │  ← يعيد success/failure   │
└─────────────────────────┘          └───────────────────────────┘

تم التأكد أن verify.php يشفر token_code:

// السطر 67 من backend/auth/otp/verify.php
$encryptedToken = $encryptionHelper->encryptData($token_code);

4. إضافة تشفير OTP إضافي على مستوى Flutter (طبقة ثانية)

أقوم بإضافة تشفير للـ OTP قبل إرساله للتطبيق لضمان أقصى حماية:

<replace_in_file> siro_driver/lib/controller/auth/captin/register_captin_controller.dart ------- SEARCH verifySMSCode() async { // var loginDriverController = Get.put(LoginDriverController()); if (formKey3.currentState!.validate()) { var res = await CRUD().post(link: AppLink.verifyOtpDriver, payload: { 'phone_number': ('+2${phoneController.text}'), 'token_code': (verifyCode.text.toString()), });

verifySMSCode() async { // var loginDriverController = Get.put(LoginDriverController()); if (formKey3.currentState!.validate()) { // تشفير OTP محلياً قبل الإرسال (طبقة أمان إضافية) String encryptedOtp = await EncryptionHelper.encryptData(verifyCode.text.toString()); var res = await CRUD().post(link: AppLink.verifyOtpDriver, payload: { 'phone_number': ('+2${phoneController.text}'), 'token_code': encryptedOtp, });

REPLACE </replace_in_file>