
Applicazione web statica per visualizzare SBOM ed eseguire scansioni di vulnerabilità on-demand con osv.dev. Facilmente distribuibile su GitHub/GitLab Pages.
Un'applicazione web statica e semplice per visualizzare le dipendenze software da file SBOM (Software Bill of Materials). Essendo un sito statico, può essere facilmente ospitata su qualsiasi servizio di hosting statico, come GitLab Pages, GitHub Pages o Netlify.
trivy image <image> --format=cyclonedx --output=sbom.json --scanners vulngrype <image> --output cyclonedx-json > sbom.jsonAttualmente BOM View supporta i formati CycloneDX e SPDX in JSON. Possono essere generati da strumenti come syft.
Questa applicazione è progettata per caricare dinamicamente gli SBOM durante l'esecuzione. Per aggiungere i tuoi SBOM, non è necessario ricostruire il progetto. Segui questi passaggi nella directory root del tuo sito statico pubblicato (ad esempio, la cartella dist o public servita dal tuo job delle pagine).
Crea la directory sboms: Se non esiste già, crea una directory denominata sboms.
Aggiungi i tuoi SBOM: Copia i tuoi file JSON CycloneDX/SPDX nella directory sboms.
Aggiorna il file indice: Crea o aggiorna un file denominato index.json all'interno della directory sboms. Questo file comunica all'applicazione quali SBOM sono disponibili. Deve contenere un singolo array JSON di stringhe, dove ogni stringa è il nome del file di un SBOM in quella directory.
Ad esempio, se hai my-app.json e another-lib.json, il file index.json dovrebbe apparire così:
[
"my-app.json",
"another-lib.json"
]
L'applicazione recupererà quindi il file index.json per popolare il menu a discesa di selezione degli SBOM e caricare il file corrispondente quando selezionato.
Di seguito è riportato un esempio di configurazione .gitlab-ci.yml che recupera una release precompilata, estrae gli SBOM e crea dinamicamente il file index.json per il deployment.
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
Puoi vedere un esempio live di questa configurazione in azione qui: https://security-dashboard-a9b4f8.gitlab.io/
La directory di deployment finale dovrebbe avere la seguente struttura:
dist/
├── assets/
│ └── ... (file CSS e JS)
├── index.html
└── sboms/
├── index.json
├── sbom1.json
├── sbom2.json
└── ...