Skip to content

الفحص والمراقبة

الفحص هو حلقة العمل الأساسية في لوحة CVE Intelligence. يقارن هذا الفصل بين الفحص الكامل والمراقبة، يوثّق سلوك الخادم، ويقدّم مخططات للمشغّلين.

لماذا وضعان؟

يوفّر NVD تغطية واسعة لكنه يفرض حدود معدل. استطلاع NVD كل دقيقتين سيتعطّل أو يفشل. لذلك تتخطى المراقبة NVD وتستعلم مصادر أسرع. الفحص الكامل للجرد الكامل عندما يُقبل التأخير.

عادةً يشغّل المشغّلون فحصاً كاملاً يومياً (أو عند الطلب) ويبقون المراقبة مفعّلة بين الفحوصات.

مقارنة الأوضاع

الجانب فحص كامل مراقبة
النقطة POST /api/scan POST /api/watch
NVD نعم لا
تحميل مسبق KEV نعم نعم (للعلامات)
knownIds على العميل غير مطلوب يميّز النتائج «الجديدة»
meta.mode full watch

تدفق الفحص الكامل

flowchart LR
  classDef ui fill:#e9edf5,stroke:#00baba,color:#253343
  classDef api fill:#f3fcfc,stroke:#008c8c,color:#253343
  classDef ext fill:#fff7ed,stroke:#eda232,color:#253343

  UI[المتصفح]:::ui --> S[POST /api/scan]:::api
  S --> KEV[تحميل مجموعة KEV]:::api
  S --> GH[كاش GitHub]:::api
  S --> RSS[خلاصات RSS]:::api
  S --> Loop[لكل أداة في المكدس]:::api
  Loop --> NVD[استعلام NVD]:::ext
  Loop --> OSV[استعلام OSV]:::ext
  Loop --> GHA[مشورات GitHub]:::ext
  S --> M[دمج + إثراء KEV]:::api
  M --> T[ترجمة اختيارية]:::api
  T --> R[استجابة JSON]:::api

شرح المخطط

يحمّل الخادم الكتالوجات المشتركة مرة واحدة، ثم لكل أداة يستعلم NVD (في الوضع الكامل) وOSV وGitHub بالتوازي ويربط تطابقات كلمات RSS. تُدمج النتائج حسب معرّف CVE؛ عضوية KEV تضبط exploited_in_wild. الترجمة الاختيارية تملأ translations / title_fa. يسجّل meta.sources_updated_at أوقات الجلب الناجحة لكل مصدر.

روال الفحص الكامل

  1. ينقر المستخدم فحصاً كاملاً؛ يرسل العميل stack وعلم translate.
  2. يتحقق الخادم من مصفوفة المكدس ويبدأ المؤقتات.
  3. يُحمَّل JSON لـ CISA KEV وصفحات GitHub (كاش) وRSS بالتوازي.
  4. لكل أداة تُنفَّذ NVD/OSV/GitHub ضمن نافذة SCAN_DAYS.
  5. mergeVulnerabilities يزيل التكرار ويدمج وسوم sources.
  6. enrichWithKev يعلّم CVE المستغلة في البرية.
  7. عند translate: true قد تُملأ حقول فارسية على الفحص؛ اللغات الأخرى لاحقاً عبر /api/translate.
  8. تُعاد أعداد الملخص ومصفوفة vuln؛ يخزّن العميل عبر src/lib/scanCache.ts (stackKey يجب أن يطابق المكدس الحالي).

ذاكرة مسح العميل

يخزّن المتصفح آخر فحص ناجح في cve-radar:last-scan مع مفتاح مكدس (أسماء أدوات مُطبَّعة ومرتّبة). عند إعادة التحميل، يستعيد loadLastScan vuln والملخص عند تطابق المفتاح؛ وإلا تُتجاهَل الذاكرة. يعمل persistLastScan بعد الفحص الكامل وعندما تُرجع المراقبة عناصر جديدة.

هذا يتجنّب فحصاً كاملاً إلزامياً في كل جلسة متصفح مع إبقاء النتائج ضمن المكدس النشط.

تسلسل المراقبة

sequenceDiagram
  participant B as المتصفح
  participant A as Express API
  participant O as OSV
  participant G as GitHub
  participant R as RSS

  B->>A: POST /api/watch {stack, knownIds}
  A->>O: استعلام لكل أداة
  A->>G: كاش المشورات
  A->>R: تحليل الخلاصة
  A->>A: دمج + فرق مع knownIds
  A-->>B: newVulns, hasNew, meta

روال المراقبة

  1. يشغّل خطاف useWatch على الفاصل (2/5/15 دقيقة من الإعدادات).
  2. يرسل العميل معرّفات CVE الحالية كـ knownIds.
  3. يجلب الخادم OSV/GitHub/RSS فقط.
  4. المعرفات الجديدة خارج knownIds تملأ newVulns؛ شريط/toast إن كانت التنبيهات مفعّلة.
  5. يدمج العميل في القائمة المحلية ويحدّث sources_updated_at.

GitLab وفيدات توزيعات Linux

إلى جانب NVD/OSV/GitHub/RSS، يمكن لـ الفحص الكامل الاستعلام عن قاعدة GitLab Advisory Database (GraphQL) وعدة فيدات أمن توزيعات Linux عند تفعيلها في إعدادات المصدر أو عبر متغيرات env.

المصدر الدور
GitLab استشارات الحزم (npm، PyPI، Maven، Go، …) — يُتخطى عند AIRGAPPED=true ما لم يُضبط GITLAB_ADVISORY_MIRROR_URL
Alpine JSON secdb لكل إصدار (ALPINE_RELEASES)
Ubuntu USN خريطة CVE→حزمة من JSON أمن Ubuntu
Red Hat إثراء (بيانات CVE، وليس صفوفاً مستقلة)
Debian Security Tracker (DEBIAN_ENABLED أو DEBIAN_TRACKER_CACHE_PATH للـ air-gap)
Amazon Linux XML updateinfo ALAS
MITRE CVE إثراء JSON 5.x اختياري عند MITRE_CVE_ENABLED=true

يطابق مستوى الحزمة عبر shared/distroPackages.ts (أداة المكدس → اسم حزمة التوزيع). تُدمج نتائج التوزيع مع NVD/OSV على معرّف CVE؛ sources_failed يسجّل أخطاء جزئية للفيد كباقي المصادر المدمجة.

ملاحظات واستثناءات

  • حد معدل الخادم (429): لـ POST /scan وPOST /watch سطلان منفصلان في الذاكرة لكل IP (RATE_LIMIT_SCAN_PER_MIN افتراضي 12، RATE_LIMIT_WATCH_PER_MIN افتراضي 120). الاستجابة: code: "RATE_LIMITED"، retryAfterSec. POST /scan/validate غير محدود. عدة تبويبات أو React StrictMode في التطوير قد تُطلق حد المراقبة — أغلق التبويبات الإضافية أو اضبط متغيرات env.
  • بدون NVD_API_KEY قد يصطدم مكدس كبير بـ HTTP 403/429 من NVD upstream — أضف مفتاحاً أو أعد المحاولة لاحقاً (مختلف عن حد معدل التطبيق).
  • فحص كامل تلقائي كل 30 دقيقة اختياري في الإعدادات؛ مستقل عن فاصل المراقبة.
  • شريط التقدم في الرأس يقدّر التقدم من جهة العميل أثناء الفحوصات الطويلة.

التالي: الترجمة واللغات