# تقرير الفحص الأمني

**المشروع:** 7 Tech Backend  
**تاريخ الفحص:** 18 أغسطس 2026  
**الحالة:** تم تنفيذ الإصلاحات الأمنية والتحقق منها بنجاح.

## نطاق الفحص

شمل الفحص:

- المصادقة وإدارة API Tokens.
- الصلاحيات ومسارات API.
- إعدادات CORS وHTTP Security Headers.
- رفع الصور وملفات PDF وZIP وتنزيلها.
- البحث عن كلمات مرور ومفاتيح وأسرار داخل المصدر.
- تدقيق حزم Composer وJavaScript.
- تشغيل اختبارات Laravel والتحليل الساكن وبناء الواجهة.

## الإصلاحات المنفذة

### 1. تقييد CORS

تم إلغاء السماح العام التالي:

```http
Access-Control-Allow-Origin: *
```

وأصبحت النطاقات المسموحة تُقرأ من متغير البيئة:

```env
CORS_ALLOWED_ORIGINS=https://admin.7tech.com,https://7tech.com
```

عند عدم تحديده، يستخدم النظام Origin الخاص بـ `APP_URL` فقط.

إعدادات CORS موجودة في:

```text
config/cors.php
```

### 2. حماية معاينة صور الشركاء

تم إلغاء إنشاء الصورة باستخدام `innerHTML` ومدخلات المستخدم، واستخدام DOM API الآمن لتقليل خطر DOM Injection وXSS.

### 3. تشديد إصدار API Tokens

أصبح أمر إصدار التوكن يرفض التنفيذ عندما:

- يكون الحساب غير نشط.
- يكون المستخدم مطالبًا بتغيير كلمة المرور.
- يكون الحساب ذا صلاحيات حساسة ولم يؤكد المصادقة الثنائية.
- تكون البيئة Production ولم يتم تمرير `--allow-production` صراحةً.

مثال للاستخدام المحلي:

```bash
php artisan api:token:issue admin@7tech.local --name="Postman" --days=1
```

الاستخدام في Production يتطلب تصريحًا واضحًا:

```bash
php artisan api:token:issue admin@7tech.com --days=1 --allow-production
```

### 4. حماية سلامة ملفات CV

إذا كان سجل السيرة الذاتية موجودًا لكن الملف مفقودًا من التخزين، يعيد النظام الآن استجابة `404` ولا ينشئ ملف PDF وهميًا قد يخفي فقدان الملف الأصلي.

### 5. تشديد فحص ZIP

أصبحت أرشيفات المشاريع تُرفض في الحالات التالية:

- احتواء الأرشيف على `../` أو مسار غير آمن.
- احتواء الأرشيف على مسار مطلق أو Windows Drive Path.
- احتواء الأرشيف على أكثر من 2000 عنصر.
- تجاوز الحجم الإجمالي بعد فك الضغط 200MB.
- وجود عنصر تالف أو غير قابل للقراءة.
- كون الأرشيف فارغًا أو غير صالح.

### 6. إغلاق تجاوز مصادقة API المحلي

تم حذف تجاوز localhost نهائيًا. أصبحت كل المسارات المحمية، بما فيها
`/api/v1/auth/me` و`/api/v1/auth/tokens`، تتطلب Bearer Token صالحًا في
جميع البيئات. كما تم حذف إنشاء Analytics payload تجريبي عند إرسال Body فارغ.

### 7. تدوير بيانات المدير والتوكنات

- تم تغيير كلمة مرور المدير إلى كلمة مؤقتة عشوائية وإجبار تغييرها عند أول دخول.
- تم إلغاء كل API Tokens النشطة للحساب الإداري.
- تم تفعيل تشفير Session وإلزام 2FA للحسابات ذات الصلاحيات الحساسة.
- تم مسح بيانات Initial CEO من `.env` ومنع Seeder من إعادة ضبط حساب قائم.
- تم حذف التوكن المخزن من جميع ملفات Postman وإعادة بناء ملف ZIP المنظف.

### 8. إصلاح Content Security Policy

أصبحت كل استجابة تستخدم CSP nonce عشوائيًا مستقلًا، وتم ربطه بكل JavaScript
مضمّن. بذلك لم تعد سياسة `script-src` تمنع وظائف الواجهة، وفي الوقت نفسه لا
تسمح بتشغيل كتل Script مضمّنة بلا nonce. كما تم استبدال جميع خصائص
`onclick` و`onchange` وبقية inline event handlers بـ event delegation
داخل ملف JavaScript الخارجي، لذلك لا يوجد `unsafe-inline` في توجيهات Script.

### 9. تحسين سلامة API والتدقيق

- مسار حذف توكن بمعرّف غير صالح يعيد `422` واضحًا بدل `405` المضلل.
- تمت إضافة سجلات Audit عند تعديل محتوى صفحة الأعمال والشركاء.
- تم استخدام مفاتيح HMAC محلية مشتقة ومفصولة نطاقيًا بدل مفتاح فارغ.
- تم إصلاح جميع أخطاء PHPStan بدل تجاهلها أو إنشاء Baseline.

## نتائج الفحص

| الفحص | النتيجة |
|---|---|
| PHPUnit | 243/243 اختبارًا ناجحًا |
| Assertions | 2051 ناجحة |
| اختبارات CSP المستهدفة | 2/2 ناجحة |
| اختبارات API المستهدفة | 22/22 ناجحة |
| PHPStan للمشروع بالكامل | صفر أخطاء |
| Laravel Pint | ناجح، دون مخالفات |
| Vite Production Build | ناجح |
| Composer Audit | لم يُعد تشغيله لأن Composer CLI غير مثبت في البيئة الحالية |
| pnpm Audit (Production) | لا توجد ثغرات معروفة |
| فحص الأسرار بعد التدوير | لا توجد كلمة مرور المدير القديمة أو API Token محفوظ داخل المشروع أو ملفات ZIP |

## إعدادات Production المطلوبة

يجب ضبط القيم التالية في بيئة الإنتاج:

```env
APP_ENV=production
APP_DEBUG=false
APP_URL=https://admin.7tech.com

CORS_ALLOWED_ORIGINS=https://admin.7tech.com,https://7tech.com
TRUSTED_HOSTS=^admin\.7tech\.com$,^7tech\.com$

SESSION_SECURE_COOKIE=true
SESSION_ENCRYPT=true
SECURITY_HSTS_ENABLED=true
```

كما يجب استخدام مفاتيح مستقلة وقوية للقيم الحساسة مثل:

```env
APP_KEY=
AUTH_AUDIT_HASH_KEY=
ANALYTICS_HASH_KEY=
```

لا يجب حفظ القيم الحقيقية لهذه المفاتيح داخل Git أو مشاركتها داخل ملفات ZIP.

## توصيات التشغيل

- استخدم HTTPS فقط في الإنتاج.
- اجعل مدة API Tokens قصيرة وألغِ التوكنات غير المستخدمة.
- لا تستخدم `--allow-production` إلا عند الحاجة وتحت إشراف مسؤول النظام.
- شغّل فحص الحزم والاختبارات قبل كل إصدار.
- راقب سجلات المصادقة والتدقيق بصورة دورية.
- احتفظ بنسخ احتياطية مشفرة واختبر الاسترجاع دوريًا.

## أوامر التحقق

```bash
php artisan test
composer audit
pnpm audit
pnpm run build
```

---

هذا التقرير يوثق حالة المشروع وقت الفحص والإصلاحات المنفذة، ولا يغني عن إعادة الفحص بعد إضافة خصائص جديدة أو تغيير إعدادات الاستضافة.
