نظرة عامة على الأمان — نظام إدارة المغسلة
معلومات الوثيقة
| الحقل |
القيمة |
| المشروع |
نظام إدارة المغسلة |
| الإصدار |
1.0 |
| اللغة |
العربية |
| نوع الوثيقة |
نظرة عامة على الأمان |
1. معمارية الأمان
┌──────────────────────────────────────────────────────┐
│ طبقات الأمان │
│ │
│ أمان التطبيق: JWT, BCrypt, أدوار وصلاحيات، تحقق │
│ حماية البيانات: AES-256, تشفير ملفات، تخزين مشفر │
│ الترخيص ومكافحة السرقة: بصمة عتادية، منع المتصفح │
│ الشبكة وDocker: منافذ داخلية، TLS، عزل الحاويات │
│ التدقيق والمراقبة: سجل تدقيق، Seq، فحوصات صحة │
└──────────────────────────────────────────────────────┘
2. أمان التطبيق
المصادقة
- تشفير كلمات المرور: BCrypt (عامل 12)
- سياسة كلمة المرور: 8 أحرف كحد أدنى، حرف كبير، رقم، رمز خاص
- الرموز: JWT (HMAC-SHA256)، صلاحية 8 ساعات
- تحديد المعدل: 5 محاولات/دقيقة لكل IP
التفويض
- 3 أدوار: مدير، استقبال، محاسب (مصفوفة الصلاحيات)
- مرشح صلاحيات على كل نقطة API
- حارس مسارات في الواجهة + توجيه
hasPermission
التحقق من المدخلات
FluentValidation على جميع الطلبات
- استعلامات معلمية (EF Core + Dapper) — لا دمج نصي خام
- Angular يعقم القوالب تلقائياً — لا
innerHTML بدون DomSanitizer
- CSRF غير قابل للتطبيق — JWT في رأس
Authorization
حماية API
- تعيين إصدارات API (
Asp.Versioning.Mvc)
- CORS مقيد بالنطاق المعروف و
localhost
- إخفاء الأخطاء: 500 ترجع رسالة عامة فقط في الإنتاج
- Swagger معطل في الإنتاج
3. حماية البيانات
التشفير عند السكون
| البيانات |
الحماية |
| ملفات PostgreSQL |
تشفير نظام الملفات (BitLocker/LUKS) |
| النسخ الاحتياطية |
AES-256-CBC |
| ملفات المزامنة (.lndsync) |
ZIP مشفر بـ AES-256-CBC |
| license.dat |
AES-256-GCM |
| سجلات Seq |
مخزنة على نظام ملفات مشفر |
التشفير أثناء النقل
| الاتصال |
الحماية |
| متصفح ↔ Traefik |
TLS 1.3 (Let's Encrypt أو mkcert) |
| Traefik ↔ API |
شبكة Docker داخلية |
| API ↔ PostgreSQL |
شبكة Docker داخلية |
4. الترخيص ومكافحة السرقة
| القلق |
الحماية |
| نسخ التطبيق لجهاز آخر |
بصمة عتادية. تطابق جزئي (≥2/4) ← تحذير. عدم تطابق ← منع. |
| استخدام التطبيق بعد انتهاء الترخيص |
7 أيام سماح. اليوم 8 ← قراءة فقط. |
| فتح التطبيق في المتصفح |
ClientTokenMiddleware — يرفض بدون رأس X-Laundry-Client-Token |
| العبث بـ license.dat |
AES-256-GCM. أي تعديل ← فشل فك التشفير. |
| التلاعب بالساعة |
النظام يسجل آخر طابع زمني. التراجع للوراء ← تحذير. |
5. أمان الشبكة وDocker
- منفذ PostgreSQL داخلي فقط — غير معرض للمضيف
- Seq: محمي بـ Traefik+HTTPS للمتصلة. محلي فقط (
localhost:5341) لغير المتصلة
- مقبس Docker: للقراءة فقط ومثبت لـ Traefik فقط
- الحاويات تشغل كمستخدمين غير جذريين
أمان نظام التشغيل المضيف
- جدار ناري: فقط المنافذ 80, 443, و 22 (SSH)
- SSH: مفتاح فقط، بدون كلمة مرور
- تحديثات أمان تلقائية للنظام
6. التدقيق والمراقبة
سجل التدقيق
كل إنشاء وتعديل وحذف وتغيير حالة يسجل:
audit_logs (id, entity_type, entity_id, action, user_id, timestamp, old_value JSONB, new_value JSONB, branch_id)
- للإلحاق فقط. لا يمكن تعديله أو حذفه.
- المدير فقط يطلع عليه.
- يشمل: تجاوزات الأسعار، الخصومات اليدوية، تغييرات الصلاحيات.
المراقبة
| الأداة |
ما تراقبه |
| Seq |
أخطاء API، أحداث محاسبية، مزامنة، مصادقة، صحة Docker |
| فحوصات الصحة |
اتصال PostgreSQL، اتصال Traefik، اتصال Seq |
| مقاييس .NET |
معدل الطلبات، الأخطاء، الذاكرة |
| OpenTelemetry |
تتبع الطلبات |
7. أفضل الممارسات للمدراء
- استخدم كلمة مرور DB قوية (32 حرفاً عشوائياً)
- شفر قرص المضيف (BitLocker/LUKS)
- احتفظ بنسخ احتياطية منتظمة مشفرة
- حدث صور Docker بانتظام
- قيد وصول SSH (مفتاح فقط)
- راجع سجل التدقيق شهرياً
- أمن ملف license.dat (صلاحيات مقيدة)
- لا تشارك بيانات اعتماد المدير
- قيد وصول Seq للعناوين المسموحة فقط
سجل المراجعة
| التاريخ |
الإصدار |
المعد |
التغييرات |
| 2026-05-10 |
1.0 |
مهندس الأمان |
الإصدار الأولي لنظرة عامة على الأمان |