
Aplicación web estática para visualizar SBOMs y realizar escaneo de vulnerabilidades bajo demanda con osv.dev. Fácilmente desplegable en GitHub/GitLab Pages.
Una aplicación web estática y sencilla para visualizar dependencias de software a partir de archivos de Lista de Materiales de Software (SBOM). Al ser un sitio estático, se puede alojar fácilmente en cualquier servicio de alojamiento web estático, como GitLab Pages, GitHub Pages o Netlify.
trivy image <image> --format=cyclonedx --output=sbom.json --scanners vulngrype <image> --output cyclonedx-json > sbom.jsonActualmente, BOM View soporta los formatos CycloneDX y SPDX en JSON. Estos pueden ser generados por herramientas como syft.
Esta aplicación está diseñada para cargar SBOM de forma dinámica en tiempo de ejecución. Para agregar sus propios SBOM, no es necesario reconstruir el proyecto. Siga estos pasos en el directorio raíz de su sitio estático desplegado (por ejemplo, la carpeta dist o public servida por su trabajo de páginas).
Cree el directorio sboms: Si aún no existe, cree un directorio llamado sboms.
Agregue sus SBOM: Copie sus archivos JSON CycloneDX/SPDX en el directorio sboms.
Actualice el archivo de índice: Cree o actualice un archivo llamado index.json dentro del directorio sboms. Este archivo le indica a la aplicación qué SBOM están disponibles. Debe contener un único arreglo JSON de cadenas, donde cada cadena es el nombre de un archivo SBOM en ese directorio.
Por ejemplo, si tiene my-app.json y another-lib.json, el archivo index.json debería verse así:
[
"my-app.json",
"another-lib.json"
]
Luego, la aplicación obtendrá el index.json para llenar el menú desplegable de selección de SBOM y cargará el archivo correspondiente cuando sea seleccionado.
A continuación se muestra un ejemplo de configuración .gitlab-ci.yml que descarga una compilación predefinida, extrae SBOM y crea dinámicamente el index.json para el despliegue.
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
Puede ver un ejemplo en vivo de esta configuración en acción aquí: https://security-dashboard-a9b4f8.gitlab.io/
Su directorio de despliegue final debe tener la siguiente estructura:
dist/
├── assets/
│ └── ... (archivos CSS y JS)
├── index.html
└── sboms/
├── index.json
├── sbom1.json
├── sbom2.json
└── ...