
Git diff لملفات SBOM—قارن مستندات CycloneDX وSPDX وSyft، واكتشف العبث، وتحكم في CI.
git diff لقوائم SBOM الخاصة بك. قارن بين قائمتين لقائمة مواد البرمجيات (SBOM) وشاهد ما الذي تغيّر بين البنيات والإصدارات والنسخ.
يقارن sbomlyze تجزئات المكونات، وليس سلاسل أرقام الإصدارات فقط. عندما يستبدل مهاجم حزمة دون تغيير رقم إصدارها، يشير sbomlyze إلى ذلك. مولّدات القوائم وماسحات الثغرات لا تلتقط هذا الأمر.
[![CI][ci-img]][ci] [![GitHub Marketplace][marketplace-img]][marketplace] [![GitHub Release][release-img]][release] [![Go Report Card][go-report-img]][go-report] [![OpenSSF Scorecard][scorecard-img]][scorecard] [![License: Apache-2.0][license-img]][license] [![Downloads][download-img]][download]
اكتشف لماذا تختلف هذه الإشارة عن فرق ملف البيان أو فرق المكونات العادي في فرق البيان مقابل فرق SBOM مقابل انحراف السلامة.
مولّدات SBOM تُنشئ القوائم وماسحات الثغرات تبحث عن CVEs. يخبرك sbomlyze بما تغيّر بين قائمتي SBOM وما إذا كان بإمكانك الوثوق بذلك. شغّله بعد المولّد الخاص بك:
syft image:tag -o cyclonedx-json | sbomlyze - --complianceيحلّل قائمة SBOM المولّدة ويقيّمها دون الحاجة إلى ملف مؤقت. قارنها بخط أساس لتصنيف الانحراف وضبط خط أنابيبك.
أضِف [فرق SBOMlyze من GitHub Marketplace][marketplace] لمقارنة قائمة SBOM مُضمّنة أو مولّدة بشكل منفصل مع خط أساس git الخاص بها. قيمة SHA الثابتة أدناه هي الإجراء v0.5.1 المنشور:```yaml
steps:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0
uses: rezmoss/sbomlyze@31503690611fda8ebba4ed2bd186eda000442594 # v0.5.1 with: sbom-path: build/sbom.cdx.json
ينشئ الإجراء ملخص Job Summary افتراضيًا ويمكنه فرض السياسات، والإبلاغ عن انحراف السلامة، ورفع SARIF، أو الحفاظ على تعليق واحد لطلب السحب. راجع [مرجع الإجراء الكامل](https://github.com/rezmoss/sbomlyze/blob/HEAD/ACTION.md) للمدخلات والمخرجات والأذونات وإرشادات الأمان. راجع [مستودع العرض التوضيحي المباشر](https://github.com/rezmoss/sbomlyze-action-demo) لتحديث تبعية ناجح وتغيير hash محجوب بنفس الإصدار، مع تشغيلات سير عمل عامة وأدلة SARIF.
للاستخدام الذاتي الخاص بالصيغة، استخدم المثال العام
[Go + SPDX](https://github.com/rezmoss/sbomlyze-go-spdx-demo)،
[Node + CycloneDX](https://github.com/rezmoss/sbomlyze-node-cyclonedx-demo)، أو
[الحاوية](https://github.com/rezmoss/sbomlyze-container-demo). يحتوي كل منها على خمسة سيناريوهات مراجعة قابلة للتكرار. يجمع [دليل beta لمدة 10 دقائق](https://github.com/rezmoss/sbomlyze/blob/HEAD/BETA.md) أربعة أسئلة مركّزة حول التفعيل وجودة الإشارة.
لا تحتاج ملفات SBOM الناتجة إلى الالتزام بها (commit): يسترد `baseline: workflow-artifact` أحدث قطعة أثرية مطابقة من تشغيل ناجح للفرع الافتراضي. يُظهر [سير عمل Syft المصاحب المثبّت](https://github.com/rezmoss/sbomlyze/blob/HEAD/examples/workflows/syft-companion.yml) التوليد ونشر الخط الأساسي بينما يظل SBOMlyze مسؤولًا عن المراجعة والسياسة.
## لماذا sbomlyze؟
تولّد العديد من الأدوات ملفات SBOM. القليل منها يقارن بينها، وعدد أقل يخبرك ما إذا كان التغيير روتينيًا أم علامة خطر في سلسلة التوريد. يسدّ sbomlyze هذه الفجوة.
| القدرة | **sbomlyze** | cyclonedx-cli | sbomqs | syft / trivy |
|---|:---:|:---:|:---:|:---:|
| مقارنة **diff** بين SBOM وSBOM | ✅ | أساسي | ❌ | ❌ |
| انحراف **السلامة / العبث** (تغيّر hash دون تغيير الإصدار) | ✅ | ❌ | ❌ | ❌ |
| فرق الرسم البياني للتبعيات + خطر العمق غير المباشر | ✅ | ❌ | ❌ | ❌ |
| تسجيل امتثال **NTIA / CISA / BSI** | ✅ | ❌ | ✅ | ❌ |
| تحويل الصيغة (Syft / CycloneDX / SPDX) | ✅ | ✅ | ❌ | جزئي |
| مستكشفات **TUI + Web UI** | ✅ | ❌ | ❌ | ❌ |
| بوابة السياسة + SARIF / JUnit / Markdown / HTML / Patch | ✅ | جزئي | جزئي | جزئي |
## الميزات
- **مقارنة SBOM**: قارن بين ملفي SBOM وشاهد المكونات المضافة والمحذوفة والمتغيرة في لمحة واحدة
- **تصنيف الانحراف**: ميِّز انحراف الإصدار عن **انحراف السلامة** (تغيّر hash دون تغيير الإصدار، مما يشير إلى العبث) وانحراف البيانات الوصفية
- **تسجيل الامتثال**: قيّم أي SBOM مقابل الحد الأدنى من عناصر **NTIA** و**CISA 2025** و**BSI TR-03183**
- **فرق الرسم البياني للتبعيات**: تتبّع التبعيات غير المباشرة وعمق سلسلة التوريد
- **دعم متعدد الصيغ**: Syft وCycloneDX وSPDX (JSON)
- **تحويل الصيغ**: التحويل بين صيغ CycloneDX وSPDX وSyft
- **مطابقة هوية قوية**: PURL → CPE → BOM-ref → أسبقية namespace/name
- **وضع الإحصاءات**: تحليل ملفات SBOM فردية لمقاييس الترخيص والتبعية والسلامة
- **وضع TUI التفاعلي**: استكشف ملفات SBOM باستخدام التنقل عبر لوحة المفاتيح والبحث
- **وضع Web UI**: مستكشف SBOM قائم على المتصفح مع رفع بالسحب والإفلات
- **محرك السياسات**: فرض قواعد الانحراف والترخيص وتسجيل الامتثال في مسارات CI
- **إجراء GitHub Marketplace**: تحكم في طلبات السحب عبر انحراف SBOM مع Job Summary وSARIF وإخراج تعليق اختياري
- **كشف التكرار والتصادم**: اعثر على إصدارات متعددة من الحزمة نفسها ومطابقات هوية غامضة
- **صيغ إخراج متعددة**: Text وJSON وSARIF وJUnit XML وMarkdown وHTML وJSON Patch
- **تحليل متسامح**: متابعة الأخطاء مع تحذيرات منظمة
## التثبيت
### Homebrew (macOS/Linux)```bash
brew install rezmoss/sbomlyze/sbomlyze
يقوم سكربت التثبيت بتنزيل الملف الثنائي الصحيح لنظام التشغيل/البنية لديك:```bash
curl -sSfL https://raw.githubusercontent.com/rezmoss/sbomlyze/main/install.sh | sh
curl -sSfL https://raw.githubusercontent.com/rezmoss/sbomlyze/main/install.sh | sudo sh -s -- -b /usr/local/bin
curl -sSfL https://raw.githubusercontent.com/rezmoss/sbomlyze/main/install.sh | sh -s -- -v 0.4.0
**خيارات المثبّت:**
| الخيار | الوصف |
|--------|-------------|
| `-b <dir>` | دليل التثبيت (الافتراضي: `./bin`) |
| `-d` | تفعيل مخرجات التصحيح |
| `-v <ver>` | تثبيت إصدار محدد (الافتراضي: الأحدث) |
يتحقق المثبّت دائمًا من المجموع الاختباري للإصدار. عند تثبيت GitHub CLI متوافق،
يتحقق أيضًا من مصدر بناء الإصدار ويتوقف عن العمل إذا لم ينجح هذا التحقق.
### التثبيت عبر Go```bash
go install github.com/rezmoss/sbomlyze/cmd/sbomlyze@latest
قم بتنزيل أحدث إصدار ثنائي من إصدارات GitHub.
ابتداءً من v0.3.7، تُنشر أرشيفات الإصدارات مع تصديقات الأرتيفاكت
الخاصة بـ GitHub. تحقق من التنزيل بشكل مستقل باستخدام:```bash
gh attestation verify ./sbomlyze_0.4.0_Linux_x86_64.tar.gz
--repo rezmoss/sbomlyze
--signer-workflow rezmoss/sbomlyze/.github/workflows/release.yml
تمت إزالة تعليمات مستودعات apt وrpm وapk غير الموقعة حتى
تدعم المستودعات التحقق من التوقيع الأصلي لمدير الحزم.
**مستخدمو macOS:** قم بإزالة علامة العزل بعد التنزيل:```bash
xattr -d com.apple.quarantine ./sbomlyze
chmod +x ./sbomlyze
git clone https://github.com/rezmoss/sbomlyze.git cd sbomlyze go build -o sbomlyze ./cmd/sbomlyze
## البدء السريع```bash
# Compare two SBOMs (the headline use case)
sbomlyze before.json after.json
# Analyze a single SBOM
sbomlyze image.json
# Read an SBOM from standard input
syft image:tag -o cyclonedx-json | sbomlyze -
# Use standard input on either side of a diff
syft image:tag -o cyclonedx-json | sbomlyze baseline.json -
# Score an SBOM against NTIA / CISA / BSI minimum elements
sbomlyze image.json --compliance
# Interactive TUI explorer
sbomlyze image.json -i
# Web UI (opens browser)
sbomlyze -web
# Convert between SBOM formats
sbomlyze convert syft.json --to spdx
sbomlyze convert cdx.json --to syft -o output.json
# JSON output for CI integration
sbomlyze before.json after.json --json
# SARIF output for GitHub Code Scanning
sbomlyze before.json after.json --format sarif
# Markdown report for PR comments
sbomlyze before.json after.json --format markdown
# Apply policy checks
sbomlyze before.json after.json --policy policy.json
sbomlyze <sbom1|-> [sbom2|-] [options] sbomlyze convert <sbom|-> --to [-o output]
Modes: Single file: sbomlyze [--json] Show statistics Interactive: sbomlyze -i Interactive explorer Convert: sbomlyze convert --to Convert SBOM format Web server: sbomlyze -web [--port 8080] Web UI explorer Two files: sbomlyze [...] Show diff
Use - in place of one SBOM path to read it from standard input.
Options: -i, --interactive Interactive TUI explorer -web, --web Start web UI server --port Web server port (default 8080) --json Output in JSON format (shortcut for --format json) --format Output format: text, json, sarif, junit, markdown, html, patch --compliance Show NTIA/CISA/BSI compliance scoring --policy Policy file for CI checks --strict Fail on parse warnings --tolerant Continue on parse warnings (default) --no-pager Disable automatic paging of output --to Target format for convert: cyclonedx (cdx), spdx, syft -o, --output Output file for convert (default: stdout) --version, -v Show version information --help, -h Show this help message
## الأوامر
### وضع الإحصائيات (ملف واحد)
تحليل SBOM للحصول على رؤى حول المكونات والتراخيص والتبعيات.```bash
sbomlyze image.json
يشمل الإخراج سياق الفحص، والنتائج الرئيسية المكتشفة تلقائيًا، والإحصائيات:``` Scan Context: Tool: syft 1.40.1 Schema: 16.0.18 Scan Scope: all-layers Source Type: image Source: alpine:latest
Key Findings: 💻 OS/Distro: Alpine Linux v3.21 📦 Dominated by apk: 71 of 71 packages (100.0%) 📂 8,542 files tracked on filesystem 🔗 Relationships: 71 containment + 64 dependency 📜 License profile: 72% permissive, 20% copyleft ⚠️ Low hash coverage: 0.0% (71 of 71 missing) 🔍 Top catalogers: apkdb-cataloger (71)
Total Components: 71
By Package Type: apk 71
Licenses: With license: 71 Without license: 0
Top Licenses: MIT 17 BSD-3-Clause 8 GPL-2.0-only 8
Integrity: With hashes: 0 Without hashes: 71
Dependencies: Components with deps: 65 Total dep relations: 176
#### النتائج الرئيسية
يقوم sbomlyze تلقائيًا بتوليد رؤى حول ملف SBOM الخاص بك. بالنسبة لتحليل ملف واحد، تشمل هذه:
| الاكتشاف | الوصف |
|---------|-------------|
| **اكتشاف نظام التشغيل/التوزيعة** | يحدد نظام التشغيل أو التوزيعة من بيانات SBOM الوصفية |
| **النظام البيئي المهيمن** | يبلغ عندما يهيمن نوع حزمة واحد (>60% من جميع الحزم) |
| **بصمة نظام الملفات** | عدد الملفات المتعقبة على نظام الملفات |
| **كثافة العلاقات** | عدد علاقات الاحتواء والاعتماد على |
| **النقاط الساخنة للمواقع** | الدلائل الأعلى التي توجد فيها المكونات |
| **ملف مخاطر الترخيص** | توزيع نسب التراخيص المسموحة/الحمائية/غير المعروفة |
| **تحذيرات جودة البيانات** | تنبيهات عند انخفاض تغطية الترخيص (<50%) أو التجزئة (<50%) أو PURL (<80%) |
| **تحذيرات التكرار** | يعلّم مجموعات المكونات المكررة |
| **تفصيل المفهرس** | أفضل الماسحات/المفهرسات التي اكتشفت المكونات (ملفات Syft SBOM) |
#### مقاييس التغطية
يحسب وضع الإحصائيات نسب التغطية لتقييم جودة البيانات:
| المقياس | الوصف |
|--------|-------------|
| **تغطية PURL** | النسبة المئوية للمكونات التي تحتوي على روابط حزم PURL |
| **تغطية CPE** | النسبة المئوية للمكونات التي تحتوي على CPEs (الجاهزية لفحص الثغرات) |
| **تغطية الترخيص** | النسبة المئوية للمكونات التي تحتوي على ترخيص واحد على الأقل |
| **تغطية التجزئة** | النسبة المئوية للمكونات التي تحتوي على تجزئات تكامل |
#### تصنيف التراخيص
يتم تصنيف التراخيص تلقائيًا إلى:
| الفئة | أمثلة |
|----------|----------|
| **حمائي (Copyleft)** | GPL, LGPL, AGPL, MPL, EPL, CDDL |
| **مسموح (Permissive)** | MIT, BSD, Apache, ISC, Zlib, Unlicense |
| **الملكية العامة** | إهداءات الملكية العامة |
| **غير معروف** | تراخيص غير معترف بها أو مفقودة |
### وضع التحويل
حوّل ملفات SBOM بين صيغ CycloneDX وSPDX وSyft JSON. يتم اكتشاف صيغة الإدخال تلقائيًا.```bash
# CycloneDX to SPDX
sbomlyze convert image.cdx.json --to spdx
# Syft to CycloneDX (cdx is an alias for cyclonedx)
sbomlyze convert syft-output.json --to cdx
# SPDX to Syft, writing to a file
sbomlyze convert spdx-output.json --to syft -o converted.json
يحافظ التحويل على أسماء المكونات وإصداراتها وPURLs وCPEs والتراخيص والتجزئات (hashes) ومعلومات المورّد وعلاقات التبعية. الحقول الخاصة بالصيغة (مثل Syft language وfoundBy وlocations) تُنقل عبر خصائص CycloneDX عند التحويل إلى CDX.
قارن بين ملفَي SBOM لمعرفة ما تغيّر بين الإصدارات.```bash sbomlyze v1.0.json v2.0.json
#### نظرة عامة على Diff
يبدأ الـ Diff بمقارنة بيانات وصفية جنبًا إلى جنب (أسماء الملفات، الأحجام، معلومات نظام التشغيل، معلومات الأداة، عدد المكونات) متبوعةً بتفاصيل سياق الفحص عند توفّرها.
#### المخرجات```
📊 Drift Summary:
📦 Version drift: 58 components
⚠️ Integrity drift: 1 component (hash changed without version change!)
📝 Metadata drift: 2 components
🔑 Key Findings:
📈 Attack surface: +5 packages (7.0%), +120 files (3.2%)
🚨 2 version downgrades detected: openssl 3.1.4→3.0.2, curl 8.5.0→8.4.0
🔄 56 version upgrades (2 major, 12 minor, 42 patch) among 65 shared packages
⚠️ Integrity drift (1 total): 1 npm (review recommended)
❌ python ecosystem entirely removed (15 → 0 packages)
➕ New ecosystem: golang (8 packages)
✅ Core system packages stable: apk (71) unchanged
+ Added (2):
+ libgcrypt 1.10.3-r0
+ libgpg-error 1.49-r0
- Removed (3):
- libapk 3.0.3-r1
- libgcc 15.2.0-r2
- nghttp3 1.13.1-r0
~ Changed (58):
~ nginx
version: 1.29.4-r1 -> 1.27.3-r1
~ suspicious-pkg ⚠️ [INTEGRITY]
hash[SHA256]: abc123 -> def456
>> Added dependencies:
pkg:apk/alpine/libxslt: +[so:libgcrypt.so.20]
<< Removed dependencies:
pkg:apk/alpine/libcurl: -[so:libnghttp3.so.9]
🔗 New transitive dependencies (3):
+ pkg:npm/lodash (depth 2)
via: [pkg:npm/my-app pkg:npm/express pkg:npm/lodash]
+ pkg:npm/underscore (depth 3)
via: [pkg:npm/my-app pkg:npm/express pkg:npm/lodash pkg:npm/underscore]
📊 New deps by depth:
Depth 2: 1
Depth 3+ (risky): 2 ⚠️
في وضع الفرق، يقوم sbomlyze تلقائيًا بتوليد رؤى أكثر ثراءً لمقارنة كلا ملفَي SBOM:
يتم تجميع المكونات المضافة والمحذوفة حسب نوع الحزمة مع قوائم عينات، مما يسهل رؤية ما تغيّر في كل نظام بيئي.
قيّم أي SBOM وفقًا لأطر العناصر الدنيا الثلاثة الرئيسية للإجابة على السؤال الذي يطرحه المدققون وفرق المشتريات باستمرار: "هل هذا SBOM مكتمل بما يكفي؟"```bash
sbomlyze image.json --compliance
sbomlyze before.json after.json --compliance
sbomlyze image.json --compliance --json
### الأطر المُقيَّمة
| Framework | Checks | Notable requirements |
|-----------|--------|----------------------|
| **NTIA Minimum Elements** (2021) | 7 | الاسم، الإصدار، المورّد، المعرّفات الفريدة (PURL/CPE)، علاقات التبعية، مؤلف الـSBOM، الطابع الزمني |
| **CISA 2025 Minimum Elements** (Aug 2025 draft) | 10 | يضيف مُنتِج البرمجيات، معلومات الترخيص، **هاش المكوّن**، واسم الأداة إضافةً إلى NTIA |
| **BSI TR-03183-2** (v2.1.0, 2025) | 9 | يتطلب جهة اتصال منشئ المكوّن، **هاش SHA-512**، تراخيص بصيغة SPDX، وجهة اتصال منشئ SBOM |
### عرض النتائج
كل إطار يعرض نسبة مئوية (الفحوصات الناجحة / إجمالي الفحوصات) بالإضافة إلى نتيجة إجمالية (متوسط عبر الأطر)، مع مؤشرات الحالة:
| Indicator | Score |
|-----------|-------|
| 🟢 | ≥ 90% |
| 🟡 | 70–89% |
| 🟠 | 50–69% |
| 🔴 | < 50% |
مخرجات JSON (`--compliance --json`) تتضمن التقرير الكامل مع تفاصيل نجاح/فشل لكل فحص؛ بينما يدمج تنسيق HTML تقرير الامتثال في صفحة التقرير.
### فرض الامتثال في CI
قم بفرض عتبات الامتثال عبر [محرك السياسات](#policy-engine). يؤدي تعيين أي عتبة إلى تفعيل تقييم الامتثال دون علامة `--compliance`:```json
{
"min_ntia_score": 85,
"min_cisa_score": 70,
"min_bsi_score": 80,
"min_overall_compliance": 75
}
PlexureGuard هي أداة تكتشف محاولات تسجيل الدخول بالقوة الغاشمة، وهجمات حجب الخدمة، والوصول غير المصرح به إلى خوادم الوسائط. تعمل كبرنامج وسيط بين المستخدم وPlex، حيث تقوم بتحليل الطلبات الواردة، وتحديد الجهات الضارة، واتخاذ الإجراءات اللازمة لحماية الخادم.
الملفات الثنائية المجمعة مسبقًا لـ PlexureGuard متاحة لمنصات متعددة في صفحة الإصدارات. قم بتنزيل الإصدار المناسب لنظام التشغيل والمعمارية الخاصة بك، واستخرج الأرشيف إذا لزم الأمر، ثم قم بتشغيل الملف الثنائي.
لبناء من المصدر، تأكد من تثبيت Go (الإصدار 1.22 أو أحدث). استنسخ المستودع وابني الملف الثنائي:
git clone https://github.com/42zen/plexureguard.git
cd plexureguard
make build
بعد بناء ناجح، يمكن العثور على الملف الثنائي plexureguard في مجلد ./bin.```bash
sbomlyze image.json --policy compliance-policy.json
## فرق الرسم البياني للتبعيات
يتجاوز sbomlyze مجرد مقارنة قوائم المكونات البسيطة لتحليل الرسم البياني الكامل للتبعيات، ويكتشف مخاطر سلسلة التوريد التي تُدخلها التبعيات الانتقالية.
### الميزات
| الميزة | الوصف |
|---------|-------------|
| **فرق الحواف** | التبعيات المباشرة المضافة/المحذوفة (A يعتمد على B) |
| **إمكانية الوصول الانتقالية** | تبعيات غير مباشرة جديدة تظهر عبر الرسم البياني |
| **تتبع فقدان التبعيات الانتقالية** | التبعيات الانتقالية التي تمت إزالتها |
| **تتبع المسار** | يوضح بالضبط كيف يتم الوصول إلى كل تبعية انتقالية جديدة |
| **تتبع العمق** | عدد القفزات بين كل تبعية جديدة ورمزك البرمجي |
| **ملخص المخاطر** | تبعيات العمق 3+ يتم الإشارة إليها كمخاطر أعلى |
### لماذا يهم العمق؟
التبعيات التي تُدخل على مستويات أعمق في الرسم البياني هي:
- أصعب في التدقيق والمراجعة
- غالبًا ما تُجلب دون موافقة صريحة
- نواقل شائعة لهجمات سلسلة التوريد (مثل حادثة event-stream)
يساعد ملخص العمق في تحديد أولويات المراجعة:
| العمق | مستوى المخاطر | الوصف |
|-------|------------|-------------|
| **1** | منخفض | تبعيات مباشرة (أنت اخترت هذه) |
| **2** | متوسط | تبعيات تبعياتك |
| **3+** | مرتفع ⚠️ | تبعيات انتقالية عميقة - راجعها بعناية |
### مثال: اكتشاف التبعيات الانتقالية العميقة```bash
# Before: app -> express (simple, 1 dep)
# After: app -> express -> lodash -> underscore -> deep-lib (chain of 4)
sbomlyze before.json after.json
المخرجات:``` 🔗 New transitive dependencies (3):
📊 New deps by depth: Depth 2: 1 Depth 3+ (risky): 2 ⚠️
### مخرجات JSON لمخطط التبعيات```json
{
"dependencies": {
"added_deps": {
"pkg:npm/express": ["pkg:npm/lodash", "pkg:npm/body-parser"]
},
"removed_deps": {},
"transitive_new": [
{
"target": "pkg:npm/underscore",
"via": ["pkg:npm/my-app", "pkg:npm/express", "pkg:npm/lodash", "pkg:npm/underscore"],
"depth": 3
}
],
"transitive_lost": [],
"depth_summary": {
"depth_1": 0,
"depth_2": 2,
"depth_3_plus": 2
}
}
}
يصنّف sbomlyze تغييرات المكونات إلى ثلاثة أنواع من الانجراف، مما يساعدك على التمييز بين التحديثات العادية والتغييرات المشبوهة المحتملة.
يحدث انحراف التكامل عندما تتغير تجزئة أحد المكونات بينما يبقى إصداره كما هو. قد يشير هذا إلى:
~ suspicious-pkg ⚠️ [INTEGRITY] hash[SHA256]: abc123 -> def456
**توصية**: تحقق دائمًا من انحراف التكامل. قد يكون غير ضار، لكنه إشارة رئيسية لأمن سلسلة التوريد.
### مخرجات JSON للانحراف
ملخص الانحراف موجود داخل كائن `diff`:```json
{
"diff": {
"changed": [
{
"id": "pkg:npm/suspicious-pkg",
"name": "suspicious-pkg",
"changes": ["hash[SHA-256]: abc123 -> def456"],
"drift": {
"type": "integrity",
"hash_changes": {
"changed": {
"SHA-256": {"before": "abc123", "after": "def456"}
}
}
}
}
],
"drift_summary": {
"version_drift": 55,
"integrity_drift": 1,
"metadata_drift": 2
}
}
}
استخراج ملخص الانجراف:```bash
sbomlyze before.json after.json --json | jq '.diff.drift_summary'
sbomlyze before.json after.json --json | jq -e '.diff.drift_summary.integrity_drift > 0'
## كشف التكرار والتصادم
### كشف التكرار
يحدد sbomlyze المكونات التي لها نفس الهوية ولكن بإصدارات مختلفة داخل SBOM:```
⚠️ Duplicates Found: 2
lodash: [4.17.20, 4.17.21]
express: [4.18.0, 4.19.2]
في وضع الفرق، يتتبّع مقارنة الإصدارات المكررة:
التصادمات هي تطابقات هوية غامضة حيث تشارك المكونات في نفس المعرّف ولكن بخصائص متعارضة:
| النوع | الوصف |
|---|---|
| عدم تطابق الاسم | أسماء مكونات مختلفة مرتبطة بنفس معرّف الهوية |
| عدم تطابق التجزئة | نفس إصدار المكوّن لديه تجزئات مختلفة (احتمال عبث) |
sbomlyze sbom.json -i

### اختصارات لوحة المفاتيح في واجهة TUI
#### التنقل
| المفتاح | الإجراء |
|---------|--------|
| `↑` / `k` | التحرك لأعلى |
| `↓` / `j` | التحرك لأسفل |
| `PgUp` / `Ctrl+u` | نصف صفحة لأعلى |
| `PgDn` / `Ctrl+d` | نصف صفحة لأسفل |
| `Home` / `g` | الانتقال إلى الأعلى |
| `End` / `G` | الانتقال إلى الأسفل |
| `Enter` | عرض تفاصيل المكوّن |
| `Esc` / `Backspace` | العودة للخلف |
| `q` / `Ctrl+c` | الخروج |
#### البحث والتصفية
| المفتاح | الإجراء |
|---------|--------|
| `/` | بحث عميق في جميع الحقول (الاسم، PURL، التراخيص، JSON الخام) |
| `t` | التصفية حسب نوع الحزمة (npm، apk، golang، pypi، إلخ.) |
| `c` | مسح جميع عوامل التصفية النشطة |
#### العروض
| المفتاح | السياق | الإجراء |
|---------|--------|--------|
| `j` | عرض التفاصيل | عرض JSON الخام للمكوّن مع تمييز بناء الجملة |
| `d` | عرض JSON | العودة إلى عرض التفاصيل |
| `Enter` | عرض JSON | تصدير JSON الخاص بالمكوّن إلى ملف |
| `?` | أي عرض | إظهار التعليمات مع جميع اختصارات المفاتيح |
### عرض تفاصيل المكوّن
يعرض عرض التفاصيل معلومات شاملة عن المكوّن:
- معلومات الحزمة (الاسم، الإصدار، PURL، النطاق، المورّد)
- التراخيص مع مؤشرات بصرية
- تجزئات التكامل
- CPEs (Common Platform Enumeration)
- قائمة التبعيات
- المعرّفات (ID، BOM-ref، SPDX-ID)
## وضع واجهة الويب
تشغيل مستكشف SBOM يعمل بالمتصفح مع إمكانية رفع الملفات بالسحب والإفلات:```bash
# Start web server on default port 8080
sbomlyze -web
# Start on custom port
sbomlyze -web --port 3000
ثم افتح http://localhost:8080 في متصفحك.
تعرض واجهة الويب إحصائيات شاملة تشمل:
مراجعة الأمان
تدقيق الامتثال
تصحيح أخطاء التطوير
تتضمن واجهة الويب متصفح نظام ملفات كامل لاستكشاف الملفات داخل ملفات SBOM (مفيد بشكل خاص لملفات SBOM المولّدة بواسطة Syft مع بيانات وصفية للملفات):
*.so, /usr/lib/**/*.conf)-i (الوضع التفاعلي)شغّل مستكشف TUI القائم على الطرفية للتنقل في ملفات SBOM باستخدام ضوابط لوحة المفاتيح.```bash sbomlyze image.json -i
الميزات: التنقل الشجري، تفاصيل المكوّنات، البحث، فحص الترخيص/التجزئة.
### `-web` (وضع خادم الويب)
يشغّل خادم ويب لاستكشاف قائمة مكوّنات البرمجيات (SBOM) عبر المتصفح.```bash
# Default port 8080
sbomlyze -web
# Custom port
sbomlyze -web --port 3000
توفر واجهة الويب رفعًا بالسحب والإفلات، وعرضًا شجريًا تفاعليًا، وبحثًا عميقًا، ولوحة إحصائيات.
--complianceقيّم ملف SBOM وفقًا لأطر الحد الأدنى من العناصر الخاصة بـ NTIA وCISA 2025 وBSI TR-03183. انظر تقييم الامتثال.```bash sbomlyze image.json --compliance sbomlyze image.json --compliance --json
### `--format` / `-f`
اختر تنسيق الإخراج. تتوفر سبعة تنسيقات:
| التنسيق | الخيار | الوصف | الأنسب لـ |
|--------|------|-------------|----------|
| **text** | `--format text` (الافتراضي) | مخرجات طرفية قابلة للقراءة من قبل الإنسان | الفحص المحلي |
| **json** | `--json` أو `--format json` | JSON منظم | خطوط أنابيب CI، والبرمجة النصية |
| **sarif** | `--format sarif` | SARIF 2.1.0 لـ GitHub Code Scanning | التكامل مع GitHub |
| **junit** | `--format junit` | نتائج اختبارات JUnit بصيغة XML | لوحات معلومات اختبارات CI |
| **markdown** | `--format markdown` | تقرير Markdown جاهز لتعليقات PR | تعليقات طلبات السحب |
| **html** | `--format html` | تقرير HTML مكتفٍ ذاتيًا (CSS/JS مضمّنان) | المدققون، تقارير قابلة للمشاركة |
| **patch** | `--format patch` | عمليات RFC 6902 JSON Patch | الترقيع البرمجي |```bash
# SARIF output for GitHub Code Scanning
sbomlyze before.json after.json --format sarif > results.sarif
# JUnit output for CI test dashboards
sbomlyze before.json after.json --format junit > results.xml
# Markdown report for PR comments
sbomlyze before.json after.json --format markdown > report.md
# Self-contained HTML report
sbomlyze before.json after.json --format html > report.html
# JSON Patch operations
sbomlyze before.json after.json --format patch > changes.json
يُنشئ تقرير SARIF 2.1.0 مناسبًا لـ GitHub Code Scanning. تشمل القواعد المكتشفة:
integrity-drift (خطأ): تغيّر التجزئة دون تغيير الإصدارdeep-dependency (تحذير): تبعية جديدة في العمق 3+new-component / removed-component (ملاحظة): إضافات/إزالات المكوّناتversion-change (ملاحظة): تحديثات إصدارات المكوّناتpolicy-violation (خطأ/تحذير): انتهاكات قواعد السياسةيُنشئ ملف JUnit XML مع حالات اختبار لـ:
يُنشئ تقرير Markdown يتضمن:
يُنشئ ملف HTML واحدًا مكتفيًا بذاته (CSS وJavaScript مضمّنان، بدون موارد خارجية) مناسبًا للإرسال بالبريد الإلكتروني إلى المدققين أو للإرفاق مع إصدار. يتضمن لوحة الإحصائيات وشجرة التبعيات وملخص الانحراف وتقرير الامتثال المضمّن عند ضبط --compliance.
يُنشئ مصفوفة من عمليات RFC 6902 JSON Patch (add، remove، replace) تمثل الفروقات.
--jsonاختصار لـ --format json. يُخرج النتائج بتنسيق JSON للاستهلاك البرمجي.```bash
sbomlyze image.json --json
sbomlyze before.json after.json --json
**بنية JSON للإحصائيات:**```json
{
"stats": {
"total_components": 71,
"by_type": {"apk": 71},
"by_license": {"MIT": 17, "BSD-3-Clause": 8},
"without_license": 0,
"with_hashes": 0,
"without_hashes": 71,
"total_dependencies": 176,
"with_dependencies": 65,
"duplicate_count": 0,
"by_language": {"go": 45, "python": 12},
"by_found_by": {"apk-db-cataloger": 71},
"license_categories": {
"copyleft": 8,
"permissive": 55,
"public_domain": 0,
"unknown": 8
},
"with_cpes": 71,
"without_cpes": 0,
"with_purl": 71,
"without_purl": 0
},
"warnings": []
}
--policy <file>طبّق قواعد السياسة وأفشِل CI في حال انتهاكها.```bash sbomlyze before.json after.json --policy policy.json
انظر [محرك السياسات](#policy-engine) للتفاصيل.
### `--strict`
يفشل فورًا عند أي خطأ في التحليل.```bash
sbomlyze broken.json --strict
# Error parsing broken.json: unknown SBOM format
# exit status 1
--tolerant (الافتراضي)متابعة المعالجة عند حدوث أخطاء، وجمع التحذيرات.```bash sbomlyze broken.json --tolerant
تتضمن تحذيرات التحليل معلومات منظمة: الملف المصدر، ورسالة قابلة للقراءة من قبل البشر، وبشكل اختياري الحقل الذي سبّب المشكلة.
### `--no-pager`
تعطيل ترقيم الصفحات التلقائي للمخرجات. مفيد عند تمرير المخرجات إلى أمر آخر أو عند العمل في بيئات غير تفاعلية.```bash
sbomlyze image.json --no-pager
sbomlyze before.json after.json --no-pager | head -20
أنشئ سياسات لفرض القواعد في خطوط أنابيب CI/CD. يخرج sbomlyze برمز 1 عند حدوث انتهاكات.
{ "max_added": 10, "max_removed": 5, "max_changed": 100, "deny_licenses": ["GPL-3.0", "AGPL-3.0"], "require_licenses": true, "deny_duplicates": true, "deny_integrity_drift": true, "max_depth": 3, "warn_supplier_change": true, "warn_new_transitive": true, "min_ntia_score": 85, "min_cisa_score": 70, "min_bsi_score": 80, "min_overall_compliance": 75 }
### قواعد السياسة
| القاعدة | النوع | الوصف |
|------|------|-------------|
| `max_added` | int | الحد الأقصى للمكونات الجديدة المسموح بها (0 = غير محدود) |
| `max_removed` | int | الحد الأقصى للمكونات المُزالة المسموح بها (0 = غير محدود) |
| `max_changed` | int | الحد الأقصى للمكونات المتغيّرة المسموح بها (0 = غير محدود) |
| `deny_licenses` | []string | قائمة بمعرّفات التراخيص المحظورة |
| `require_licenses` | bool | يتطلب أن تحتوي جميع المكونات *المضافة* على تراخيص (يتحقق فقط من المكونات المضافة حديثًا في وضع الفرق) |
| `deny_duplicates` | bool | فشل إذا وُجدت حزم مكررة في النتيجة |
| `deny_integrity_drift` | bool | فشل إذا تغيّرت تجزئة المكوّن دون تغيير الإصدار (خطر سلسلة التوريد) |
| `max_depth` | int | فشل إذا وُجدت تبعيات انتقالية جديدة على عمق >= N (0 = غير محدود) |
| `warn_supplier_change` | bool | تحذير (وليس فشل) إذا تغيّر مورّد المكوّن أو مؤلفه |
| `warn_new_transitive` | bool | تحذير (وليس فشل) عند وجود أي تبعيات انتقالية جديدة |
| `min_ntia_score` | int | فشل إذا كانت درجة امتثال NTIA أقل من هذا (0-100، 0 = معطّل) |
| `min_cisa_score` | int | فشل إذا كانت درجة امتثال CISA أقل من هذا (0-100، 0 = معطّل) |
| `min_bsi_score` | int | فشل إذا كانت درجة امتثال BSI أقل من هذا (0-100، 0 = معطّل) |
| `min_overall_compliance` | int | فشل إذا كانت درجة الامتثال الإجمالية أقل من هذا (0-100، 0 = معطّل) |
> تعيين أي عتبة من عتبات `min_*_score` يؤدي تلقائيًا إلى تشغيل تقييم الامتثال، حتى بدون علامة `--compliance`.
### مثال: سياسة صارمة```json
{
"max_added": 5,
"max_removed": 3,
"max_changed": 20,
"deny_licenses": ["GPL-3.0", "AGPL-3.0", "SSPL-1.0"],
"require_licenses": true,
"deny_duplicates": true,
"deny_integrity_drift": true,
"max_depth": 3,
"warn_supplier_change": true,
"warn_new_transitive": true,
"min_overall_compliance": 80
}
!! Policy Violations (3): [max_added] too many components added: 10 > 5 [max_removed] too many components removed: 7 > 3 [deny_licenses] component foo has denied license: GPL-3.0
## صيغ SBOM المدعومة
| الصيغة | اكتشاف الملف | المعرّفات المستخرجة |
|--------|----------------|----------------------|
| Syft (الأصلي) | مفتاح JSON `"artifacts"` + أحد `"source"` أو `"distro"` أو `"descriptor"` | PURL, CPE, name |
| CycloneDX | مفتاح JSON `"bomFormat"` = `"CycloneDX"`، أو `"$schema"` يحتوي على `cyclonedx` | PURL, CPE, BOM-ref, group (namespace) |
| SPDX | مفتاح JSON `"spdxVersion"` يبدأ بـ `"SPDX-"` | PURL, CPE, SPDXID |
يجب أن تكون جميع الصيغ بصيغة JSON. دعم XML غير متاح حاليًا.
### تحويل الصيغ
يمكن لـ sbomlyze التحويل بين أي من الصيغ الثلاث المدعومة:```bash
sbomlyze convert input.json --to spdx # any format → SPDX 2.3
sbomlyze convert input.json --to cyclonedx # any format → CycloneDX 1.5
sbomlyze convert input.json --to syft # any format → Syft JSON
انظر وضع التحويل للحصول على التفاصيل.
يمكن لـ sbomlyze مقارنة ملفات SBOM بصيغ مختلفة:```bash
sbomlyze syft-output.json cyclonedx-output.json
sbomlyze spdx-output.json syft-output.json
**ملاحظة:** تختلف مستويات التفاصيل التي تستخرجها صيغ SBOM المختلفة. قد يُظهر الفرق عبر الصيغ تغييرات تعكس اختلافات في الصيغة (مثل توفر الحقول) وليس تغييرات فعلية في النظام. سيقوم نظام النتائج الرئيسية بالتحذير عند اكتشاف عدم تطابق في سياق الفحص.
## مطابقة هوية المكوّن
تُطابَق المكوّنات باستخدام نظام هوية قائم على الأولوية:
| الأولوية | المعرّف | مثال | الوصف |
|----------|------------|---------|-------------|
| 1 | PURL | `pkg:npm/lodash` | رابط الحزمة (بدون رقم الإصدار) |
| 2 | CPE | `cpe:vendor:product` | بائع CPE:المنتج (بدون رقم الإصدار) |
| 3 | BOM-ref / SPDXID | `ref:component-123` | معرّف CycloneDX bom-ref أو معرّف SPDX |
| 4 | Namespace + Name | `com.example/mypackage` | المجموعة/الفضاء الاسمي مع الاسم |
| 5 | Name | `simple-package` | الرجوع إلى الاسم فقط |
## تكامل CI/CD
### GitHub Actions
يوفّر SBOMlyze إجراءً لـ JavaScript خالٍ من التبعيات. يقارن SBOM الخاص بالفرع الحالي (المُضمَّن في المستودع أو المُنشأ بشكل منفصل) مع الملف الموجود في قاعدة git لطلب السحب، وينشر ملخص الوظيفة (Job Summary)، وينتج بصورة اختيارية SARIF أو يحدّث تعليقًا واحدًا على طلب السحب (PR).```yaml
name: SBOM Check
on:
pull_request:
permissions:
contents: read
jobs:
sbom-diff:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0
- id: sbomlyze
uses: rezmoss/sbomlyze@31503690611fda8ebba4ed2bd186eda000442594 # v0.5.1
with:
sbom-path: build/sbom.cdx.json
policy: .github/sbom-policy.json
fail-on: policy
الإجراء لا يشغّل أوامر المولّد أبدًا. أنشئ SBOM الرئيسي في خطوة منفصلة ومراجَعة أو أضفه إلى المستودع. كل من comment و sarif يُضبطان افتراضيًا على false؛ لا تزال طلبات السحب من الفروع (forked PRs) تتلقى ملخص الوظيفة الكامل عند عدم توفّر صلاحية التعليق. راجع مرجع الإجراء لمعرفة كل المدخلات/المخرجات، وتثبيت SHA، ورفع SARIF، والصلاحيات، وسلوك الأمان.
sbom-diff: stage: test script: - syft . -o json > current.json - sbomlyze baseline.json current.json --policy policy.json --json > sbom-report.json - sbomlyze baseline.json current.json --format junit > sbom-junit.xml artifacts: paths: - sbom-report.json reports: junit: sbom-junit.xml when: always
### تنبيه انحراف النزاهة```bash
# Alert on any integrity drift (CI example)
if sbomlyze baseline.json current.json --json | jq -e '.diff.drift_summary.integrity_drift > 0' > /dev/null; then
echo "⚠️ INTEGRITY DRIFT DETECTED - Investigate immediately!"
exit 1
fi
if sbomlyze baseline.json current.json --json | jq -e '.diff.dependencies.depth_summary.depth_3_plus > 0' > /dev/null; then echo "⚠️ New deep transitive dependencies detected - Review required!" fi
### بوابة الامتثال```bash
# Fail the build if the SBOM doesn't meet minimum-element requirements
sbomlyze current.json --policy compliance-policy.json
# where compliance-policy.json sets min_overall_compliance / min_ntia_score / etc.
| الرمز | المعنى |
|---|---|
| 0 | النجاح، لا توجد اختلافات أو انتهاكات |
| 1 | تم العثور على اختلافات (أي مكونات مضافة/محذوفة/معدلة)، أو انتهاكات للسياسة، أو أخطاء |
ملاحظة: في وضع الفرق، يتم إرجاع رمز الخروج 1 عند اكتشاف أي تغييرات في المكونات، حتى بدون ملف سياسة. وهذا يجعله قابلاً للاستخدام كبوابة بسيطة لـ "هل تغير أي شيء؟" في CI.
syft nginx:1.25-alpine -o json > nginx-125.json syft nginx:1.26-alpine -o json > nginx-126.json
sbomlyze nginx-125.json nginx-126.json
### تدقيق الترخيص```bash
# Check for GPL licenses in new dependencies
cat > audit-policy.json << EOF
{
"deny_licenses": ["GPL-2.0", "GPL-3.0", "LGPL-2.1", "LGPL-3.0"],
"require_licenses": true
}
EOF
sbomlyze old.json new.json --policy audit-policy.json
cat > no-drift.json << EOF { "max_added": 0, "max_removed": 0, "max_changed": 0 } EOF
sbomlyze baseline.json current.json --policy no-drift.json
### فحص الامتثال```bash
# Score an SBOM and enforce a minimum
sbomlyze image.json --compliance
cat > compliance-policy.json << EOF
{
"min_ntia_score": 90,
"min_overall_compliance": 80
}
EOF
sbomlyze image.json --policy compliance-policy.json
syft alpine:latest -o json > alpine-syft.json sbomlyze convert alpine-syft.json --to cyclonedx -o alpine-cdx.json
sbomlyze convert vendor-sbom.cdx.json --to spdx > vendor-sbom.spdx.json
sbomlyze convert input.json --to spdx | jq '.packages | length'
### استكشف SBOM في المتصفح```bash
# Generate SBOM and explore in web UI
syft alpine:latest -o json > alpine.json
# Start web server
sbomlyze -web
# Then open http://localhost:8080 and drag-drop alpine.json
sbomlyze alpine.json -i
## التطوير
### تشغيل الاختبارات```bash
make test
# or
go test -v ./...
make lint # runs go vet + golangci-lint + staticcheck make vulncheck # runs govulncheck for known CVEs
### البناء```bash
make build-quick
# or
go build -o sbomlyze ./cmd/sbomlyze
make all # Run test, lint, and build make test # Run all tests with race detector make lint # Run go vet, golangci-lint, and staticcheck make vulncheck # Run govulncheck for known vulnerabilities make build # Build with goreleaser (snapshot) make build-quick # Quick build for development make snapshot-test # Run snapshot tests only make update-snapshot # Update snapshot golden files make clean # Remove build artifacts
## المساهمة
المساهمات مرحّب بها! القضايا الجيدة للمبتدئين مُعلَّمة بوسم [`good first issue`](https://github.com/rezmoss/sbomlyze/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22). انظر [CONTRIBUTING.md](https://github.com/rezmoss/sbomlyze/blob/HEAD/CONTRIBUTING.md) إذا كان موجودًا، ولا تتردد في فتح قضية أو مناقشة لاقتراح تغييرات.
[ci]: https://github.com/rezmoss/sbomlyze/actions/workflows/ci.yml
[ci-img]: https://github.com/rezmoss/sbomlyze/actions/workflows/ci.yml/badge.svg
[marketplace]: https://github.com/marketplace/actions/sbomlyze-diff
[marketplace-img]: https://img.shields.io/badge/Marketplace-SBOMlyze%20Diff-blue?logo=github
[release]: https://github.com/rezmoss/sbomlyze/releases
[release-img]: https://img.shields.io/github/v/release/rezmoss/sbomlyze
[go-report]: https://goreportcard.com/report/github.com/rezmoss/sbomlyze
[go-report-img]: https://goreportcard.com/badge/github.com/rezmoss/sbomlyze
[license]: https://raw.githubusercontent.com/rezmoss/sbomlyze/main/LICENSE
[license-img]: https://img.shields.io/badge/License-Apache%202.0-blue.svg
[download]: https://github.com/rezmoss/sbomlyze/releases
[download-img]: https://img.shields.io/github/downloads/rezmoss/sbomlyze/total
[scorecard]: https://scorecard.dev/viewer/?uri=github.com/rezmoss/sbomlyze
[scorecard-img]: https://api.scorecard.dev/projects/github.com/rezmoss/sbomlyze/badge
| الصيغة | القيمة --to | المخرجات |
|---|
| CycloneDX 1.5 | cyclonedx أو cdx | JSON بصيغة CycloneDX مع البيانات الوصفية والتبعيات والخصائص |
| SPDX 2.3 | spdx | JSON بصيغة SPDX مع الحزم والعلاقات والمراجع الخارجية |
| Syft | syft | JSON بصيغة Syft مع القطع الأثرية والعلاقات والمصدر ومعلومات التوزيعة |
| النتيجة | الوصف |
|---|
| عدم تطابق سياق الفحص | يحذر إذا تغيّر إصدار المخطط أو نطاق الفحص بين ملفي SBOM |
| فارق سطح الهجوم | التغيرات في عدد الحزم والملفات والعلاقات مع النسب المئوية |
| أنظمة بيئية اختفت/جديدة | أنواع الحزم التي ظهرت أو اختفت بالكامل |
| الانتقال بين أنظمة التشغيل/التوزيعات | يكتشف التغيرات في نظام التشغيل بين عمليات الفحص |
| تحليل تغيّر الإصدارات | يحسب الترقيات مقابل التخفيضات، ويصنف التغييرات كرئيسية/ثانوية/تصحيحية |
| تخفيضات الإصدار | يضع علامة على التخفيضات كإشارة أمنية مع تفاصيل المكوّن |
| سياق انحراف التكامل | يفصّل انحراف التكامل حسب نوع الحزمة مع إرشادات المخاطر |
| أنماط المسارات المهيمنة | التغييرات المركزة حسب النوع ومسار نظام الملفات |
| نقاط الإزالة/الإضافة الساخنة | أكثر الدلائل تأثرًا بالتغييرات |
| الأنواع المستقرة | أنواع الحزم ذات الأعداد المتطابقة (النواة غير المتغيرة) |
| تحولات فئة الترخيص | التغيرات في توازن الحقوق المتروكة/السماحية |
| فجوات المفهرس | الماسحات التي عثرت على حزم في Before ولكن لا شيء في After |
| النوع | المؤشر | الوصف | الخطورة |
|---|
| الإصدار | 📦 | تغيّر رقم الإصدار | عادي |
| التكامل | ⚠️ | تغيّر التجزئة (Hash) دون تغيّر الإصدار | مرتفع - استقصِ! |
| البيانات الوصفية | 📝 | تغيّرت البيانات الوصفية فقط (التراخيص، إلخ) | منخفض |
| الميزة | الوصف |
|---|
| رفع بالسحب والإفلات | اسحب وأفلت أي ملف SBOM (Syft أو CycloneDX أو SPDX) في الصفحة (حتى 500MB) |
| شجرة التبعيات | عرض شجري تفاعلي مع تنقّل بالتوسيع/الطي (مقسّم إلى صفحات لأكثر من 5000 مكوّن) |
| تفاصيل المكوّن | عرض التراخيص والتجزئات والتبعيات ومعلومات المورّد وعدد الملفات |
| عرض JSON الخام | JSON مع تلوين بناء الجملة لكل مكوّن |
| البحث العميق | ابحث في جميع الحقول بما في ذلك بيانات JSON الخام |
| لوحة الإحصائيات | مقاييس التغطية وفئات التراخيص وتوزيع اللغات |
| متصفح نظام الملفات | تصفّح الملفات داخل SBOM مع تنقّل في الدلائل وبحث وفلترة حسب الطبقات |