Update: 2026-06-12 20:40:40
This commit is contained in:
108
driver_auth_flow_corrected_analysis.md
Normal file
108
driver_auth_flow_corrected_analysis.md
Normal file
@@ -0,0 +1,108 @@
|
||||
<div dir="rtl" lang="ar">
|
||||
|
||||
# تحليل تدفق السائق (Siro Driver) — النسخة المصححة
|
||||
|
||||
---
|
||||
|
||||
## 1. توضيح هام بخصوص connect.php
|
||||
|
||||
### ملف `backend/connect.php` الحديث (يحتوي على الحماية)
|
||||
|
||||
```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`:
|
||||
|
||||
```php
|
||||
// السطر 67 من backend/auth/otp/verify.php
|
||||
$encryptedToken = $encryptionHelper->encryptData($token_code);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. إضافة تشفير OTP إضافي على مستوى Flutter (طبقة ثانية)
|
||||
|
||||
أقوم بإضافة تشفير للـ OTP قبل إرساله للتطبيق لضمان أقصى حماية:
|
||||
|
||||
<replace_in_file>
|
||||
<path>siro_driver/lib/controller/auth/captin/register_captin_controller.dart</path>
|
||||
<diff>
|
||||
------- 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
|
||||
</diff>
|
||||
</replace_in_file>
|
||||
Reference in New Issue
Block a user