Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
engagement-mgr — Engagement Manager هو تطبيق ويب لتتبع مهام الأمن الهجومي. يتميز بواجهة مستخدم حديثة، مبنية باستخدام Next.js وPrisma وPostgreSQL. | Kitploit
أدوات/GitHubGitHub/leebaird/engagement-mgr
أدوات دفاعيةتحليل الثغرات الأمنيةأمن الويباختبار الاختراقالأدوات والمكوناتالتعلم والتعليمالفريق الأحمرالاستجابة للحوادث
GitHubleebaird/engagement-mgr

engagement-mgr

Engagement Manager هو تطبيق ويب لتتبع مهام الأمن الهجومي. يتميز بواجهة مستخدم حديثة، مبنية باستخدام Next.js وPrisma وPostgreSQL.

عرض المستودع
2438منذ 2 أيامتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

مدير المهام

مدير المهام هو تطبيق ويب لتتبع مهام الأمن الهجومي. يتميز بواجهة مستخدم حديثة، مبنية باستخدام Next.js وPrisma وPostgreSQL. يتضمن التطبيق تقويمًا، ومهامًا، وعملاء، وجهات اتصال، ونتائج، ومشغلين.

License: MIT

  • Twitter Follow Lee Baird @discoverscripts
  • Twitter Follow Jay "L1ghtn1ng" Townsend @jay_townsend1

لقطات الشاشة

Dashboard

جدول المحتويات

  • لقطات الشاشة
  • كتابة النتائج وإنتاج تقارير PDF
    • أمن التقارير والنشر
    • التحقق
  • المتطلبات الأساسية
  • تكوين البيئة
  • إعداد قاعدة البيانات
    • التطوير
    • الإنتاج
  • التثبيت
    • الإعداد الآلي (Ubuntu)
      • ملاحظات الترقية للإعداد المُحصّن والنسخ الاحتياطي
    • الإعداد اليدوي
  • تشغيل التطبيق
  • النشر في الإنتاج
    • المتطلبات
    • خطوات النشر
    • قائمة التحقق للإنتاج
  • بيانات الاعتماد الافتراضية
  • ترحيل الخادم (النسخ الاحتياطي / الاستعادة / إعادة التعيين)
  • خطة التنفيذ والبنية المعمارية
    • حزمة التقنيات
    • مخطط قاعدة البيانات
    • إضافة حقول جديدة
    • البنية الأمنية

كتابة النتائج وإنتاج تقارير PDF

  • مساحة عمل الكتابة: افتح رابط Write & review الخاص بالنتيجة لتحرير Markdown ومعاينة آمنة. تُحفظ المسودات الخاصة بعد 15 ثانية من عدم النشاط أو عند الطلب؛ وتُخزَّن على الخادم، وليس في التخزين المحلي للمتصفح. استعد المسودة صراحةً بعد إعادة فتحها. تحافظ عمليات الحفظ المتعارضة على نص المحرر وتتطلب المقارنة مع المراجعة الحالية. يمكن فحص مراجعات النص واستعادتها؛ والاستعادة لا تستعيد الأدلة المحذوفة.
  • قوالب قابلة لإعادة الاستخدام: ابحث في الصياغات المعتمدة حسب العنوان أو الفئة أو الخطورة. يمكن للمستخدمين اقتراح قوالب؛ ويقوم المسؤولون بتنسيقها والموافقة عليها. تطبيق قالب ينشئ نتيجة مهمة مستقلة بملاحظات فارغة ومضيفين متأثرين وأدلة فارغة، مما يمنع إعادة الاستخدام العرضي لإثبات مهمة أخرى.
  • الأدلة: ارفع أو الصق ما يصل إلى أربع صور PNG/JPEG معًا، وأضف تسميات توضيحية، وحرّر التسمية/الترتيب في مساحة عمل الكتابة. تُفكَّك الصور، وتُجرَّد من البيانات الوصفية، وتُغيَّر أبعادها إلى 2000 × 2000 بكسل كحد أقصى، وتُحفظ بصيغة PNG. احتفظ بالأدلة الجنائية الأصلية بشكل منفصل إذا كانت البايتات الأصلية أو البيانات الوصفية مطلوبة.
  • المراجعة: أرسل النتائج المكتملة من Draft/Changes Requested إلى Ready. يمكن لمراجع معيّن أو مسؤول، غير المؤلف الحالي، الموافقة أو طلب تغييرات. يعيّن المسؤولون المراجعين. تؤدي تغييرات النص والأدلة والمراجعات المستعادة إلى مسح الموافقة. يدعم قائمة انتظار المراجعة والتعليقات وقائمة التحقق من الجاهزية وسجل المراجعات عملية التسليم.
  • تقارير PDF: اختر مهمة في Reports، واكتب ملخصها التنفيذي، وحدد/رتّب النتائج واحفظ الإعدادات. تُوسَم مسودات PDF بشكل مرئي. يمكن للمسؤولين فقط إصدار PDF نهائي، ويجب أن تكون كل نتيجة محددة معتمدة وتجتاز فحوصات الجاهزية. تخزّن كل نسخة صادرة ملف PDF الخاص بها ولقطة محتوى صريحة وملخص SHA-256؛ والتعديلات اللاحقة لا تعيد إنشاءها. حذف المهمة الأصلية لا يزال يحذف تقاريرها عبر دورة الحياة الحالية.
  • استيرادات الماسحات الضوئية: عاين تصديرًا، وحدد النتائج، ثم أكّد. لا تنفذ الاستيرادات أي فحوصات أو تتصل بالأهداف. يتخطى التبصيم من جانب الخادم النتائج المطابقة في نفس المهمة؛ وتبدأ جميع السجلات الجديدة كمسودة ويجب أن يتحقق منها مشغل.

تقتصر الصادرات على 2 ميغابايت و500 نتيجة لكل استيراد، مع حدود معدل المعاينة والتأكيد لكل مستخدم. يقبل التطبيق ما لا يزيد عن 10,000 نتيجة إجمالاً و500 لمهمة واحدة عبر الإنشاء اليدوي والقوالب واستيرادات الماسحات الضوئية. تحمّل قائمة Findings العامة 100 صف لكل صفحة، وتُحدَّد استعلامات نتائج المهمة/التقرير بنفس الحد لكل مهمة. تفشل التخطيطات غير المعروفة بشكل مرئي بدلاً من معاملتها بصمت كاستيراد ناجح. خطورات الماسح الضوئي هي اقتراحات: راجع سياقها قبل الموافقة. لا يتم جلب أو تنفيذ عناوين URL المشار إليها أو HTML أو الصور البعيدة المضمنة.

تسمح التقارير بـ 1–100 نتيجة، وما يصل إلى 100 صورة دليل (5 ميغابايت لكل منها، 20 ميغابايت إجمالي الإدخال)، و500 صفحة و25 ميغابايت إخراج. يقتصر الإصدار على 50 نسخة لكل مهمة و1 غيغابايت من ملفات PDF الصادرة عبر التطبيق. للمعاينة والإصدار حدود معدل لكل مستخدم، ويُقبل عرض PDF واحد فقط لكل عملية تطبيق في المرة الواحدة. تحتفظ النتائج بما لا يزيد عن 1000 مراجعة و500 تعليق؛ والوصول إلى الحد يفشل دون الكتابة فوق السجل. خطوط DejaVu وترخيص إعادة توزيعها مضمنة في assets/fonts؛ ويجب أن تحتفظ عمليات النشر بهذه الأصول (يتضمن تتبع مخرجات Next.js هذه الأصول).

تشترك إجراءات خادم Next.js في حد حجم جسم واحد 25mb (المحدد في next.config.ts) لتحميلات الأدلة. يستخدم تسجيل الدخول مسارًا مخصصًا بنفس الأصل بترميز URL مع حد بث 4 كيلوبايت قبل المصادقة أو العمل على قاعدة البيانات.

أمن التقارير والنشر

يحافظ هذا على مساحة العمل المشتركة الموثّقة الحالية، وليس نموذجًا جديدًا لتعدد المستأجرين لكل عميل. تتحقق جميع الصفحات والإجراءات وتنزيلات PDF الجديدة من جلسة حالية مدعومة بقاعدة البيانات. تُحدَّد المسودات لمالكها؛ وتُفرض أذونات المراجعة والموافقة على القوالب والإصدار من جانب الخادم. استجابات PDF السرية خاصة/بدون تخزين. تحتوي ملفات PDF النهائية فقط على قائمة سماح صريحة لحقول التقرير، ولا تحتوي أبدًا على مسودات خاصة أو تعليقات مراجعة أو مهام غير ذات صلة.

يستخدم التنفيذ قائمة التحقق OWASP Top 10:2025: فحوصات الوصول (A01)، والاستجابات الخاصة وضوابط CSP/CSRF الحالية (A02)، والتبعيات المثبتة وCI (A03)، وحمايات الجلسة/الأسرار الحالية بالإضافة إلى فحوصات سلامة التقرير (A04/A08)، وMarkdown/XML الخامل والوصول إلى قاعدة البيانات ذي المعاملات (A05)، والمعالجة المحدودة والمراجعة المستقلة (A06)، وفحوصات الجلسة الحية (A07)، وأحداث التدقيق الخالية من المحتوى (A09)، والتغييرات المعاملاتية مع التنظيف عند الفشل (A10). يكشف الملخص عن التلف العرضي؛ وهو ليس توقيعًا رقميًا أو حماية من مسؤول قاعدة البيانات. هذا ليس شهادة امتثال. لا يزال الإنتاج يتطلب HTTPS، وتخزين قاعدة البيانات/النسخ الاحتياطي المحمي، والمراقبة التشغيلية لمخرجات التدقيق.

قبل نشر هذا الترقية، خذ نسخة احتياطية عادية للتطبيق وطبّق الترحيلات الإضافية 20260904221808_reporting_workflow و20260906194500_add_revocable_sessions باستخدام npm run db:migrate، ثم أعد إنشاء Prisma Client وأعد البناء. تبدأ النتائج الحالية كمسودة في الإصدار 1، ويجب أن تسجل ملفات تعريف ارتباط المتصفح الحالية الدخول مرة أخرى حتى تتلقى معرف جلسة مدعومًا من الخادم. لا تعد تعيين قاعدة بيانات موجودة. تتضمن النسخ الاحتياطية الجداول الجديدة وملفات PDF الصادرة عبر تصدير قاعدة البيانات الكامل الحالي.

التحقق```bash

npm test npm run lint npx tsc --noEmit --noUnusedLocals --noUnusedParameters npm run build npm audit

root@kitploit:~
يستخدم `npm test` وضع الاختبار غير المعزول في Node مع `tsx` بحيث تُنفَّذ حالات اختبار TypeScript الفردية فعليًا، بدلًا من مجرد الإبلاغ عن نجاح العملية الفرعية للملف. أبقِ إجماليات التأكيدات الصريحة ظاهرة في CI.

تتطلب اختبارات الانحدار لقاعدة البيانات والمتصفح **قاعدة بيانات محلية مخصصة باسم `reporting_tests`**، مع تطبيق الترحيلات. فهي تنشئ صفوف بياناتها التجريبية وتحذفها بنفسها؛ لا توجّه هذه الاختبارات أبدًا إلى قاعدة بيانات تطبيقية. اضبط `REPORTING_TEST_DATABASE_URL` على قاعدة بيانات الاختبار تلك، ثم شغّل:```bash
DATABASE_URL="$REPORTING_TEST_DATABASE_URL" npx prisma migrate deploy
npm run test:reporting
npx playwright install chromium
npm run test:browser

يبدأ جناح المتصفح خادم تطوير خاص به على واجهة الاسترجاع المحلية (loopback) على المنفذ 3317 مع سر جلسة مخصص للاختبار فقط؛ ويرفض إعادة استخدام خادم موجود. اضبط REPORTING_TEST_BROWSER على ملف تنفيذي لـ Chromium مثبّت إذا رغبت في ذلك. يختبر خصوصية المسودة، والتعديلات المتعارضة، ورفع الأدلة، والمراجعة المستقلة، وأذونات PDF/عدم قابليته للتغيير، وإنشاء القوالب بدون JavaScript، والاستيرادات الانتقائية منزوعة التكرار. تمارس اختبارات التكامل تعارضات المعاملات الفعلية والتراجع. لا تحل هذه الأجنحة محل التحقق من شبكة LAN البعيدة أو Safari أو النشر في بيئة الإنتاج.

المتطلبات الأساسية

صُمم هذا التطبيق ليعمل على Ubuntu، ويتطلب ما يلي:```bash sudo apt update && sudo apt install -y nodejs npm postgresql postgresql-client postgresql-contrib zip

root@kitploit:~
`postgresql-client` يوفر `pg_dump` و`pg_restore` و`psql`؛ بينما `zip` ينشئ أرشيفات النسخ الاحتياطي. تتم معالجة استخراج الاستعادة بواسطة التطبيق مع التحقق الصارم من المدخلات والأحجام.

تثبيت الحزم لا يضمن دائمًا بقاء PostgreSQL قيد التشغيل. ابدأ الخدمة وفعّل التشغيل التلقائي لها قبل إنشاء الأدوار أو تشغيل التطبيق:```bash
sudo systemctl enable --now postgresql
sudo systemctl status postgresql --no-pager

إذا فشل التطبيق لاحقًا مع Can't reach database server at 127.0.0.1:5432، فشغّل sudo systemctl start postgresql وتأكد باستخدام pg_isready -h 127.0.0.1 -p 5432.

يتطلب التطبيق Node.js ^22.12.0 أو >=24.0.0 (انظر engines في package.json). إذا كانت حزمة نظام التشغيل أقدم، فثبّت إصدارًا مدعومًا من مصدر حزم موثوق تتحقق من توقيعاته قبل تشغيل setup.sh.

إعداد البيئة

أنشئ ملف .env في جذر المشروع قبل تشغيل Prisma أو التطبيق:```bash cat > .env << 'EOF' DATABASE_URL="postgresql://em_admin:em_pass@localhost:5432/engagement_manager?schema=public" JWT_SECRET="replace-with-a-long-random-secret-at-least-32-characters" EOF chmod 600 .env

root@kitploit:~
| المتغير | مطلوب | ملاحظات |
|----------|----------|-------|
| `DATABASE_URL` | نعم | سلسلة اتصال PostgreSQL. يستخدم Prisma معامل الاستعلام `schema=public`. تستخدم النسخ الاحتياطي والاستعادة ملف pgpass مؤقتًا مخصصًا للمالك فقط حتى لا تُوضع كلمة المرور في وسائط العمليات الفرعية. |
| `JWT_SECRET` | نعم في بيئة الإنتاج | يجب أن يكون بطول **32 حرفًا** على الأقل. يرفض التطبيق بدء التشغيل في بيئة الإنتاج بدونه. يؤدي تدويره إلى إبطال جميع الجلسات الحالية. |
| `TRUST_PROXY` | لا | اضبطه على `1` (أو `true`) فقط عندما يكون التطبيق خلف وكيل عكسي **يستبدل** `X-Forwarded-For` / `X-Real-IP` و `X-Forwarded-Host`. تستخدم فحوصات أصل تسجيل الدخول `X-Forwarded-Host` عند وجوده في هذا الوضع؛ ويجب أن يحتوي على مضيف عام واحد، بما في ذلك منفذ غير افتراضي عند استخدامه. وإلا فيجب أن يحافظ الوكيل على ترويسة `Host` العامة. هذه هي البنية المطلوبة في بيئة الإنتاج لحدود تسجيل الدخول الدقيقة لكل مصدر. عند عدم ضبطه، يتم تجاهل الترويسات لمنع الانتحال، ويستخدم تسجيل الدخول ميزانية احتياطية مشتركة أعلى مدتها دقيقة واحدة حتى لا يتمكن عميل واحد من فرض قفل عام لمدة 15 دقيقة. |
| `ALLOWED_DEV_ORIGINS` | لا | **للتطوير فقط.** أسماء مضيفين إضافية مسموح لها بتحميل أصول `/_next` (مفصولة بفواصل). تُسمح عناوين IPv4 الحالية للشبكة المحلية للخادم تلقائيًا. استخدم هذا لاسم DNS ثابت. تتجاهل إصدارات الإنتاج هذا. |

أنشئ سرًا قويًا:```bash
openssl rand -base64 32

إعداد قاعدة البيانات

تأكد من تشغيل PostgreSQL أولاً (انظر المتطلبات الأساسية). يقوم ./setup.sh الآلي بتشغيل الخدمة نيابةً عنك؛ تفترض الخطوات اليدوية أدناه أنها قيد التشغيل بالفعل.

التطوير

نفّذ الأوامر التالية لإنشاء قاعدة بيانات PostgreSQL والمستخدم:```bash sudo -u postgres createuser --pwprompt em_admin sudo -u postgres psql -c "ALTER USER em_admin CREATEDB;" sudo -u postgres createdb --owner=em_admin engagement_manager sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE engagement_manager TO em_admin;"

root@kitploit:~
### الإنتاج

استخدم مستخدم قاعدة بيانات مخصصًا بأقل صلاحيات ممكنة — لا تمنح صلاحيات `CREATEDB` أو حقوق المستخدم الخارق:```bash
sudo -u postgres createuser --pwprompt em_app
sudo -u postgres createdb --owner=em_app engagement_manager

قم بتعيين DATABASE_URL لاستخدام em_app (أو اسم المستخدم الذي اخترته). يتم تشغيل الترحيلات باسم هذا المستخدم عبر npm run db:migrate.

ملاحظة: يتم تخزين ملفات قاعدة البيانات في دليل بيانات PostgreSQL (عادةً /var/lib/postgresql/<version>/main/).

التثبيت

الإعداد الآلي (Ubuntu)

من جذر المستودع، شغّل:```bash chmod +x setup.sh ./setup.sh

root@kitploit:~
يقوم السكربت بتثبيت المتطلبات الأساسية، وبدء خدمة PostgreSQL وتمكينها، ويطلب اسم مستخدم وكلمة مرور لقاعدة البيانات، ويكتب ملف `.env` بصلاحيات `chmod 600`، وينشئ دور PostgreSQL وقاعدة البيانات، ويطبّق الترحيلات، ويزرع حساب المسؤول الافتراضي. كما يُكمل وضع الإنتاج `npm run build` ويطبع فقط أمر بدء الإنتاج. وهو لا يثبّت Node.js من سكربت shell عن بُعد؛ ثبّت إصدار Node.js مدعومًا أولًا.

للاستخدام بدون واجهة أو في CI:```bash
sudo install -d -m 700 -o "$USER" /secure
openssl rand -base64 24 > /secure/db-password
chmod 600 /secure/db-password
./setup.sh -y --db-user=em_admin --db-pass-file=/secure/db-password

شغّل ./setup.sh --help لعرض جميع الخيارات.

ملاحظات الترقية للإعداد المُحصَّن والنسخ الاحتياطية

  • تمت إزالة --db-pass=... لأن أسرار سطر الأوامر تكون مرئية للعمليات الأخرى. ضع كلمة المرور في ملف مخصص للمالك فقط واستبدل الوسيط القديم بـ --db-pass-file=/secure/db-password؛ مثال الإعداد الآلي أعلاه جاهز للنسخ واللصق.
  • لم يعد setup.sh يثبّت Node.js. ثبّت إصدار Node.js مدعومًا (^22.12.0 أو >=24.0.0) من مصدر حزم موثوق قبل تشغيله.
  • يستخدم تثبيت التبعيات الآن npm ci، لذا يجب أن يكون package-lock.json موجودًا ومتزامنًا مع package.json.
  • لا يمكن استعادة النسخ الاحتياطية القديمة بصيغة .sql. قبل إيقاف خادم قديم، قم بترقيته إلى إصدار يمكنه إنشاء نسخة احتياطية منظمة للتطبيق وإعادة تصدير البيانات بصيغة .zip.

الإعداد اليدوي

  1. ثبّت تبعيات Node.js: ```bash npm ci
    root@kitploit:~
  2. قم بتشغيل ترحيلات قاعدة البيانات لبناء الجداول: ```bash npx prisma migrate dev
    root@kitploit:~
  3. قم بتهيئة قاعدة البيانات لإنشاء حساب المسؤول الافتراضي: ```bash npx prisma db seed
    root@kitploit:~

تشغيل التطبيق

من دليل المشروع، يقوم أمر واحد بتثبيت تحديثات الحزم، وتشغيل PostgreSQL إذا كان متوقفًا، وبدء التطبيق:```bash ./run.sh

root@kitploit:~
اترك تلك النافذة مفتوحة. استخدم عنوان Local أو Network الذي يطبعه.

لبدء تشغيله بنفسك بدلاً من ذلك: يجب أن يكون PostgreSQL قيد التشغيل (`sudo systemctl start postgresql` إذا لزم الأمر). ثم ابدأ خادم التطوير:```bash
npm run dev

تطبع عملية بدء التشغيل كلاً من عنوان URL للاسترجاع وعنوان LAN لهذا الجهاز:```

  • Local: http://localhost:3000
  • Network: http://192.168.1.20:3000
root@kitploit:~
`npm run dev` و `npm start` يربطان `0.0.0.0` بحيث يعمل عنوان URL للشبكة على LAN. تعامل مع الوصول عبر LAN كوصول مختبري فقط على شبكة موثوقة. وضع التطوير غير مُحصَّن للإنترنت العام.

إذا فتحت التطبيق عبر **اسم المضيف** (وليس IP) وكان المتصفح البعيد يعرض صفحة بيضاء فارغة، فأضف ذلك الاسم إلى `.env` وأعد التشغيل:```bash
ALLOWED_DEV_ORIGINS=dev.office.example

النشر في بيئة الإنتاج

المتطلبات

  • Node.js ^22.12.0 أو >=24.0.0 (انظر engines في package.json)
  • PostgreSQL مع مستخدم تطبيق بأقل صلاحيات ممكنة (انظر إعداد قاعدة البيانات)
  • HTTPS أمام التطبيق (وكيل عكسي مثل nginx أو Caddy). يتم تمييز ملفات تعريف ارتباط الجلسة بـ Secure في بيئة الإنتاج.
  • تخزين دائم لدليل uploads/ (لقطات شاشة الثغرات)

خطوات النشر

  1. استنسخ المستودع وثبّت التبعيات: ```bash npm ci

    root@kitploit:~
  2. أنشئ ملف .env بقيم الإنتاج (DATABASE_URL، JWT_SECRET بطول 32 حرفًا على الأقل).

  3. طبّق ترحيلات قاعدة البيانات: ```bash npm run db:migrate

    root@kitploit:~
  4. تشغيل فحوصات ما قبل النشر: ```bash npm run audit npm run typecheck npm run build

    root@kitploit:~
  5. ابدأ التطبيق باستخدام NODE_ENV=production: ```bash NODE_ENV=production npm run start

    root@kitploit:~

بالنسبة لخادم حقيقي، شغّل هذا تحت مدير عمليات (systemd، PM2، إلخ) وضع وكيلاً عكسياً في المقدمة لإنهاء TLS.

  1. أنشئ حساب المسؤول الأول من خلال بذر قاعدة البيانات (للتطوير فقط) أو عن طريق الاستعادة من نسخة احتياطية. غيّر كلمة مرور البذر المؤقتة فوراً قبل تعريض التطبيق للمستخدمين.

قائمة التحقق للإنتاج

  • JWT_SECRET لا يقل عن 32 حرفاً وغير مُودَع في git
  • NODE_ENV=production مضبوط للعملية قيد التشغيل
  • HTTPS مُهيأ؛ HTTP يعيد التوجيه إلى HTTPS
  • مستخدم قاعدة البيانات لا يملك صلاحيات CREATEDB أو صلاحيات المستخدم الخارق
  • uploads/ على قرص دائم ومضمّن في النسخ الاحتياطية
  • backups/ على قرص دائم إذا استخدم المسؤولون النسخ الاحتياطي
  • pg_dump وpg_restore وzip متاحة إذا سيستخدم المسؤولون النسخ الاحتياطي/الاستعادة

بيانات الاعتماد الافتراضية

بعد بذر قاعدة البيانات، يمكنك تسجيل الدخول باستخدام حساب المسؤول المؤقت المُنشأ:

  • اسم المستخدم: admin
  • كلمة المرور: تُكتب مرة واحدة في initial-admin-credentials.txt المخصص للمالك فقط بواسطة npx prisma db seed / npm run db:seed

ملاحظة: سيُطلب منك تغيير كلمة المرور المؤقتة هذه عند أول تسجيل دخول. احذف initial-admin-credentials.txt فوراً بعد ذلك. يجب أن تكون جميع كلمات المرور 16 حرفاً على الأقل وأن تتضمن حرفاً كبيراً وحرفاً صغيراً ورقماً ورمزاً.

ترحيل الخادم (النسخ الاحتياطي / الاستعادة / إعادة الضبط)

  • يخزّن الشريط الجانبي تنسيق التاريخ وتفضيل المنطقة الزمنية لكل متصفح محلياً. يمكن للمنطقة الزمنية أن تتبع نظام تشغيل العارض أو عرض الطوابع الزمنية بتوقيت UTC؛ تبقى تواريخ جدول الارتباط تواريخ تقويمية دون تغيير.
  • يمكن للمسؤول عمل نسخة احتياطية واستعادة كامل بيانات التطبيق من صفحة Admin (/dashboard/users).
  • استخدم هذا عند الانتقال من خادم قديم إلى خادم جديد: استنسخ التطبيق على المضيف الجديد، ثم استعد نسخة احتياطية من المضيف القديم.

في Admin، تُظهر لوحة Database أزرار Backup وRestore وReset. تسرد لوحة Users الحسابات وتوفر زر New User لإضافة مستخدمين. تتيح لوحة Appearance للمسؤول اختيار لون التمييز على مستوى التطبيق.

يتطلب Backup كلمة مرور المسؤول، ثم يحفظ ملف .zip باسم em-backup-YYYY-MM-DD-HHMM.zip في backups/ في دليل التطبيق (engagement-mgr/backups/). بعد تصدير ناجح، استخدم Download في صفحة Admin. يُحتفظ بمنحة موقّعة قصيرة الأجل في ملف تعريف ارتباط HttpOnly وتعمل فقط للمسؤول الذي أنشأ النسخة الاحتياطية.

  • يستخدم الطابع الزمني التوقيت المحلي للخادم الذي يشغّل التطبيق، دون ثوانٍ. مثال: em-backup-2026-06-02-1430.zip.
المسارالمحتويات
engagement-manager-backup/database.dumpتفريغ PostgreSQL كامل بالتنسيق المخصص (المخطط، الجداول، البيانات، التعدادات، العلاقات) من pg_dump
engagement-manager-backup/uploads/ملفات لقطات شاشة النتائج المشار إليها في قاعدة البيانات
  • يقبل Restore فقط ملف .zip أنشأه Backup ويستبدل قاعدة البيانات الحالية ومجلد uploads/. تقتصر الاستعادة عبر المتصفح على 8 ميغابايت حتى لا تتمكن إزالة الضغط من احتكار عملية الويب. لأرشيف أكبر، أوقف التطبيق وشغّل npm run db:restore -- /absolute/path/to/em-backup.zip كمستخدم التطبيق. يحمّل الأمر دون اتصال .env من دليل العمل ويتطلب DATABASE_URL غير فارغ في .env أو البيئة. يقبل الملفات العادية حتى 500 ميغابايت ويمرر كل مدخل أرشيف عبر حد حجمه الموسّع. تعمل استعادة قاعدة البيانات في معاملة واحدة؛ يتم التحقق من أعداد مدخلات الأرشيف والمسارات ونسب الضغط والأحجام الموسّعة قبل تثبيت الملفات. تتشارك النسخة الاحتياطية والاستعادة وإعادة الضبط وتغييرات ملفات لقطات الشاشة قفل صيانة حصرياً بحيث لا يمكن تداخل عمليات إيداع قاعدة البيانات وتبديل نظام الملفات. يتطلب كلمة مرور المسؤول للتأكيد.
  • Reset يمحو جميع بيانات التطبيق، ويستعيد لون التمييز الأحمر الافتراضي، ويعيد إنشاء admin. يتطلب كتابة RESET وإعادة إدخال كلمة المرور الحالية للمسؤول المؤكِّد. تصبح كلمة المرور تلك كلمة المرور المؤقتة للحساب المُعاد إنشاؤه ويجب تغييرها عند أول تسجيل دخول.

الخادم القديم

  1. سجّل الدخول كمستخدم Admin.
  2. افتح Admin وانقر على Backup (تحت Database).
  3. احفظ ملف .zip وانسخه إلى الخادم الجديد (على سبيل المثال باستخدام scp أو rsync): ```bash scp em-backup-2026-06-02-1430.zip user@new-server:/path/to/
    root@kitploit:~

خادم جديد

  1. ثبّت المتطلبات الأساسية واستنسخ المستودع.
  2. أنشئ ملف .env يحتوي على DATABASE_URL و JWT_SECRET (انظر إعداد البيئة).
  3. أنشئ قاعدة بيانات PostgreSQL فارغة ومستخدمًا (انظر إعداد قاعدة البيانات).
  4. ثبّت التبعيات: npm ci.
  5. شغّل الترحيلات والتهيئة الأولية مرة واحدة ليتمكن المسؤول من تسجيل الدخول. تستبدل عملية الاستعادة بيانات التهيئة هذه بالنسخة الاحتياطية.
  6. ابنِ التطبيق وشغّله في وضع الإنتاج (انظر النشر في الإنتاج): ```bash npm run build NODE_ENV=production npm run start
    root@kitploit:~
  7. سجّل الدخول باسم admin باستخدام ملف initial-admin-credentials.txt المخصص للمالك فقط، وغيّر كلمة المرور المؤقتة، واحذف ملف بيانات الاعتماد.
  8. افتح Admin (/dashboard/users)، وانقر على Restore (ضمن Database)، واختر ملف .zip من الخادم القديم، وأدخل كلمة مرور المسؤول، وأكّد.
  9. أعد تشغيل التطبيق إذا كان قيد التشغيل بالفعل حتى يلتقط البيانات المستعادة.

ملاحظات

  • الإجراءات الحساسة: تتطلب كل من Backup وRestore وReset إعادة تأكيد كلمة مرور المسؤول. كما يستبدل كل من Restore وReset صفوف قاعدة البيانات الموجودة ويكتب فوق دليل uploads/.
  • JWT_SECRET: قد يختلف على الخادم الجديد؛ لا يتم ترحيل جلسات المتصفح الحالية من الخادم القديم. يسجّل المستخدمون الدخول مجددًا باستخدام الحسابات من قاعدة البيانات المستوردة.
  • كود التطبيق: استخدم git clone (أو انشر نفس المراجعة) على الخادم الجديد حتى يتطابق التطبيق مع المخطط الذي يتوقعه النسخ الاحتياطي. إذا كان الخادم القديم يعمل بمخطط أحدث من الكود المستنسخ، فقم بمحاذاة الإصدارات قبل الاستيراد.
  • الأدوات: يتطلب النسخ الاحتياطي والاستعادة أدوات CLI المثبّتة في Prerequisites.

خطة التنفيذ والبنية المعمارية

يوثّق هذا القسم البنية المعمارية، ومخطط قاعدة البيانات، والتدابير الأمنية، ومراحل التطوير المكتملة لتطبيق Engagement Manager.

حزمة التقنيات

  • إطار العمل متعدد الطبقات: Next.js 16+ (React) باستخدام App Router.
  • قاعدة البيانات: PostgreSQL.
  • ORM: Prisma.
  • المصادقة: تنفيذ مخصص باستخدام ملفات تعريف ارتباط جلسة صارمة (تُمسح عند إغلاق المتصفح) وArgon2id لتجزئة كلمات المرور. تفرض كلمات المرور حدًا أدنى يبلغ 16 حرفًا، مع رموز وأرقام وحروف مختلطة الحالة إلزامية.
  • التنسيق: CSS خام بأسلوب glassmorphism للوضع الداكن على لوحات الصفحات؛ النوافذ المنبثقة معتمة بالكامل عبر Modal.tsx و.modal-panel في globals.css.

مخطط قاعدة البيانات

إضافات التقارير: يخزّن Finding أيضًا version وreviewStatus وauthorId وreviewerId وtemplateId وimportFingerprint؛ ويخزّن Screenshot الحقل sortOrder. يحتفظ FindingTemplate بصياغة قابلة لإعادة الاستخدام تمت مراجعتها؛ ويحتفظ FindingRevision بمراجعات نصية غير قابلة للتغيير؛ ويحتفظ FindingDraft بمسودات خاصة لكل مستخدم مع إصدارات التعارض؛ ويسجّل FindingComment مناقشات المراجعة؛ ويحتفظ EngagementReport بعنوان التقرير والملخص التنفيذي ومعرّفات النتائج المرتّبة؛ ويخزّن IssuedReport ملف PDF غير قابل للتغيير ولقطة محتوى وملخص SHA-256 لكل إصدار صادر. تستخدم علاقات المؤلف/المراجع للمستخدم SetNull؛ وتُحذف المسودات الخاصة عند حذف مستخدمها. تتبع سجلات التقارير دورة حياة engagement/finding الأب الخاص بها.

  • User: id، username، passwordHash، role (Admin، User)، lastPasswordChange، lastLogin، sessions، createdAt، updatedAt.
  • Session: id، userId، expiresAt، createdAt — تجعل السجلات من جانب الخادم كل جلسة تسجيل دخول موقّعة قابلة للإلغاء بشكل فردي عند تسجيل الخروج.
  • LoginRateLimit: key، count، — حجوزات ذرّية لمحاولات المصدر وتأكيد كلمة المرور. كما أن للتحقق من كلمة المرور حدّ تزامن محدود.

إضافة حقول جديدة

لإضافة حقل جديد إلى نموذج موجود (على سبيل المثال، focus في Engagement):

  1. افتح prisma/schema.prisma وأضف الحقل إلى النموذج المطلوب: ```prisma model Engagement { id String @id @default(uuid()) codeName String focus String? // new field ... }
    root@kitploit:~
  2. يجب أن يتبع كل تغيير في prisma/schema.prisma بما يلي: ```bash npx prisma migrate dev --name describe_your_change
    root@kitploit:~

هذا ينشئ ترحيلاً، ويحدّث قاعدة البيانات، ويعيد توليد أنواع Prisma Client.

  1. حدّث أي مكونات واجهة مستخدم أو نماذج أو منطق تحقق أو إجراءات خادم متأثرة حسب الحاجة.

بنية الأمان

  1. المصادقة والحسابات: يتم توليد حساب admin الافتراضي عبر Prisma seed. تتمتع أدوار Admin بصلاحية إنشاء/تعديل/حذف كاملة لجميع السجلات. يمكن لأدوار User إنشاء وتعديل وحذف النتائج ولقطات الشاشة؛ بينما تكون جميع الكيانات الأخرى (المهام، العملاء، جهات الاتصال، المشغلون) للقراءة فقط بالنسبة للمستخدمين. تقوم كل صفحة من صفحات لوحة التحكم بتحديث الجلسة مقابل قاعدة البيانات قبل قراءة البيانات السرية. يمكن للمشرفين فقط الوصول إلى صفحة الإدارة (/dashboard/users)، وإدارة الحسابات، وتغيير لون التمييز على مستوى التطبيق، وإجراء النسخ الاحتياطي أو الاستعادة أو إعادة تعيين قاعدة البيانات. تتطلب عمليات النسخ الاحتياطي والاستعادة وإعادة التعيين إعادة تأكيد كلمة المرور. إنشاء نسخة احتياطية هو Server Action؛ ويستخدم تنزيل المتصفح GET /api/db/backup?file=… مع جلسة Admin ومنحة موقّعة لمدة خمس دقائق في ملف تعريف ارتباط HttpOnly.
  2. إدارة الجلسات: تستخدم الجلسات رموز JWT من jose مخزّنة في ملفات تعريف ارتباط HttpOnly وSameSite=Lax مع صف Session مطابق على جانب الخادم يُبطله تسجيل الخروج. تم حذف انتهاء صلاحية ملف تعريف الارتباط عمداً للحفاظ على سلوك جلسة المتصفح؛ تنتهي صلاحية كل من الرمز الموقّع وسجل قاعدة البيانات بعد يوم واحد. يحتفظ القبول المعاملاتي بعشر جلسات نشطة كحد أقصى لكل حساب.
تنزيل الأداة
عائلة الماسح/التصديرالتصدير المقبول
Burp SuiteIssues XML، بما في ذلك DTD المخطط الداخلي الخامل
Nessus / TenableNessus v2 XML (.nessus)
NmapXML؛ تصبح المنافذ المفتوحة ومخرجات نصوصها البرمجية ملاحظات إعلامية، وليست ثغرات مستنتجة
OpenVAS / Greenboneتقرير XML أصلي أو GMP get_reports_response
OWASP ZAPتقرير JSON التقليدي مع المواقع والتنبيهات
NucleiJSON Lines (-jsonl)
QualysXML لنتائج الفحص (بنية SCAN/IP)، وليس تنسيق واجهة برمجة اكتشاف المضيف المنفصل
Semgrep / CodeQL ومنتجات SARIF الأخرىتشغيلات SARIF JSON والقواعد والنتائج
resetAt
  • ApplicationSetting: سجل إعدادات مفرد على مستوى التطبيق يحتوي على highlightColor (Red، Blue، Teal، Green، Purple، أو Amber) وupdatedAt.
  • Engagement: id، codeName، clientId، chargeCode، status (Prep، Recon، Testing، Reporting، Complete)، focus، type (AI، Code_Review، Firewall، Multi، Pentest، Phishing، Physical، Purple_Team، Red_Team، USB_Drop، Vishing، Web_App، Wireless)، location (Internal، External)، startPrep، endPrep، startRecon، endRecon، startTesting، endTesting، startReporting، endReporting، outbrief، objectives، targets، exclusions، notes، operators (M:N)، contacts/trustedAgents (M:N مع Contact)، findings، findingContexts، createdAt، updatedAt.
  • Client: id، company (عمود قاعدة البيانات: companyName)، address، city، state، zip، phone (عمود قاعدة البيانات: phoneNumber)، website، notes، contacts، engagements، createdAt، updatedAt.
  • Contact: id، clientId، name، title، email، phone (عمود قاعدة البيانات: phoneNumber)، notes، assignedEngagements، trustedEngagements، createdAt، updatedAt.
  • Finding: id، engagementId (اختياري)، title، category، severity، background، remediation، supportingData (عمود قاعدة البيانات: supportingLinks)، screenshots، engagementContext، createdAt، updatedAt.
  • EngagementFindingContext: id، engagementId، findingId، observation، affectedHosts، createdAt، updatedAt.
  • Screenshot: id، findingId، filePath، description، createdAt.
  • Operator: id، name، title، email، phoneNumber، discord، github، notes، engagements (M:N)، createdAt، updatedAt.
  • أمان التطبيق:
    • يفرض Next.js Edge Proxy (src/proxy.ts) فحوصات الجلسة وتدوير كلمة المرور كل 90 يوماً عبر جميع المسارات المحمية.
    • تقلل Next.js Server Actions من مخاطر CSRF عبر حمايات same-origin المدمجة.
    • يخفف Prisma تلقائياً من حقن SQL عبر تعميم جميع الاستعلامات.
    • يخفف React من XSS عبر الهروب التلقائي من عناصر HTML عند العرض.
    • تُخزَّن لقطات الشاشة بأذونات المالك فقط وبحصص إجمالية/لكل نتيجة محدودة. يستخدم الحذف علامات معلّقة قابلة للاسترداد؛ ويوفّق بدء تشغيل لوحة التحكم والتحميلات والنسخ الاحتياطية بين ملفات القرص ومراجع قاعدة البيانات، مع تسجيل إخفاقات التنظيف في مخرجات التدقيق، والأخطاء التفصيلية في سجلات الخادم، وعرض تحذير للمشرفين. تعيد عملية التوفيق الفاشلة في لوحة التحكم المحاولة مرة واحدة على الأكثر في الدقيقة لكل عملية؛ ومع ذلك لا تزال التحميلات والنسخ الاحتياطية تتحقق من التخزين فوراً. يمنع مسار /api/uploads الموثّق IDOR ويعيد استجابات no-store.