# الأمان

## حدود الثقة

- لا تثق بأي `tenant_id` أو `sender_id` أو `user_id` وارد من المتصفح؛ كل عملية تتحقق من الدور والعميل والمرسل في Gate/Policy/Service.
- رابط Webhook يحمل سر جهاز فريدًا؛ يخزّن Hash فقط ويُدوّر عند الشك. يقبل endpoint أحجامًا محدودة ويستخدم Rate Limit، ثم يضع الأعمال الثقيلة في الطابور.
- Payload الوارد والنص الأصلي مشفران في DB. يستخدم النص المنقح فقط في قوائم الرسائل وملفات التصدير وإشعارات Telegram.
- Tokens وChat IDs وأسرار TOTP مشفرة بـAPP_KEY. لا تستبدل APP_KEY بعد الإعداد.
- ملفات الصوت والتصدير والنسخ خاصة؛ التحقق من الصلاحية مطلوب في كل عملية تنزيل. تحقق MIME والحجم قبل حفظ الصوت.
- Blade يهرب HTML افتراضيًا، وعناوين استجابة أمنية تطبق `nosniff`, `frame deny`, CSP, Referrer-Policy وPermissions-Policy. Secure cookies مطلوبة عبر HTTPS.
- تسجيل الدخول محدود المحاولات، وSuper Admin يحتاج TOTP، ويمكن إنهاء الجلسات الأخرى.

## التدقيق

أحداث منصة Super Admin تذهب إلى `super_admin_security_logs`، ولا تظهر في سجل العميل أو Timeline. لا يوجد مسار تحديث/حذف لهذه الأحداث في واجهة التطبيق. سجلات العميل لا تحتوي النص الأصلي. عمليات عرض وتصدير وتغيير الأسرار والحدود وتوزيع المرسلين تسجل actor/IP/وقت/هدف عند توافر السياق.

## قائمة فحص إصدار

- `APP_DEBUG=false`, APP_KEY غير فارغ ومحفوظ بأمان، HTTPS، Secure cookies، البريد مضبوط.
- لا أسرار في Git أو `.env.example` أو `public/build`; ملف `.env` خارج `public_html`.
- استعراض محاولة IDOR من عميل إلى آخر وموظف بلا مشاهدة، تنزيل صوت من مستخدم غير مخول، وتصدير Spreadsheet يبدأ بـ`=`, `+`, `-`, `@`.
- فحص access logs: يجب ألا يحتفظ مسار Webhook بسر الجهاز؛ قيّد أو احجب مسار `/api/webhooks/sms/*` من السجلات أو استخدم وكيلًا يحذف المسار الحساس.
- مراجعة النسخ المشفرة، انتهاء ملفات التصدير، عمر Queue، وجدول failed_jobs دوريًا.

## حدود معلومة

CSP تسمح بـ`unsafe-inline` لأن صفحة Blade تحتوي تهيئة صغيرة وLivewire؛ ذلك أضعف من CSP nonce. يقتصر الوصول للصوت على سياسة Laravel، لكن مدة الصوت لا تُحلل باستخدام ffprobe على الاستضافة المشتركة، بل يقيد الحجم والتسجيل في المتصفح بثلاث دقائق. استضافة ملفات المشروع خارج Document Root شرط أمان عند عدم توجيه النطاق إلى `public/`.
