
Application web statique pour visualiser les SBOMs et effectuer des analyses de vulnérabilités à la demande avec osv.dev. Facilement déployable sur GitHub/GitLab Pages.
Une application web statique simple pour afficher les dépendances logicielles à partir de fichiers de nomenclature logicielle (SBOM). Étant un site statique, elle peut être facilement hébergée sur n'importe quel service d'hébergement web statique, comme GitLab Pages, GitHub Pages ou Netlify.
trivy image <image> --format=cyclonedx --output=sbom.json --scanners vulngrype <image> --output cyclonedx-json > sbom.jsonActuellement, BOM View prend en charge les formats CycloneDX et SPDX en JSON. Ceux-ci peuvent être générés par des outils comme syft.
Cette application est conçue pour charger les SBOM dynamiquement à l'exécution. Pour ajouter vos propres SBOM, vous n'avez pas besoin de reconstruire le projet. Suivez ces étapes dans le répertoire racine de votre site déployé (par exemple, le dossier dist ou public servi par votre job de pages).
Créez le répertoire sboms : S'il n'existe pas déjà, créez un répertoire nommé sboms.
Ajoutez vos SBOM : Copiez vos fichiers JSON CycloneDX/SPDX dans le répertoire sboms.
Mettez à jour le fichier d'index : Créez ou mettez à jour un fichier nommé index.json dans le répertoire sboms. Ce fichier indique à l'application quels SBOM sont disponibles. Il doit contenir un seul tableau JSON de chaînes, où chaque chaîne est le nom de fichier d'un SBOM dans ce répertoire.
Par exemple, si vous avez my-app.json et another-lib.json, le fichier index.json doit ressembler à ceci :
[
"my-app.json",
"another-lib.json"
]
L'application récupérera alors le fichier index.json pour remplir la liste déroulante de sélection des SBOM et chargera le fichier correspondant lorsqu'il est sélectionné.
Voici un exemple de configuration .gitlab-ci.yml qui récupère une version pré-construite, extrait les SBOM et crée dynamiquement le fichier index.json pour le déploiement.
stages:
- sbom
- deploy
create_sbom:
stage: sbom
image: alpine:3.23.2
before_script:
- apk add syft
script:
- mkdir sboms
- syft alpine:3.19 -o cyclonedx-json=sboms/alpine-cyclone.json
artifacts:
paths:
- sboms
pages:
stage: deploy
image: alpine:3.23.2
before_script:
- apk add curl jq
script:
- curl -L https://github.com/hristiy4n/bom-view/releases/download/v0.4.0/bom-view-v0.4.0-dist.tar.gz | tar zx
- mv dist public
- mkdir public/sboms
- cp sboms/* public/sboms
- |
find sboms -maxdepth 1 -type f -name '*.json' ! -name 'index.json' \
| sed 's|.*/||' \
| sort \
| jq -R . | jq -s . > public/sboms/index.json
needs:
- job: create_sbom
artifacts:
paths:
- public
Vous pouvez voir un exemple en direct de cette configuration en action ici : https://security-dashboard-a9b4f8.gitlab.io/
Votre répertoire de déploiement final doit avoir la structure suivante :
dist/
├── assets/
│ └── ... (fichiers CSS et JS)
├── index.html
└── sboms/
├── index.json
├── sbom1.json
├── sbom2.json
└── ...