
Aplicação web estática para visualizar SBOMs e realizar varredura de vulnerabilidades sob demanda com osv.dev. Facilmente implantável no GitHub/GitLab Pages.
Uma aplicação web estática e simples para exibir dependências de software a partir de arquivos de Lista de Materiais de Software (SBOM). Por ser um site estático, pode ser facilmente hospedado em qualquer serviço de hospedagem estática, como GitLab Pages, GitHub Pages ou Netlify.
trivy image <image> --format=cyclonedx --output=sbom.json --scanners vulngrype <image> --output cyclonedx-json > sbom.jsonAtualmente, o BOM View suporta os formatos CycloneDX e SPDX em JSON. Eles podem ser gerados por ferramentas como syft.
Esta aplicação foi projetada para carregar SBOMs dinamicamente em tempo de execução. Para adicionar seus próprios SBOMs, você não precisa reconstruir o projeto. Siga estas etapas no diretório raiz do seu site estático implantado (por exemplo, a pasta dist ou public servida pelo seu job de páginas).
Crie o diretório sboms: Se ainda não existir, crie um diretório chamado sboms.
Adicione seus SBOMs: Copie seus arquivos CycloneDX/SPDX JSON para o diretório sboms.
Atualize o Arquivo de Índice: Crie ou atualize um arquivo chamado index.json dentro do diretório sboms. Este arquivo informa à aplicação quais SBOMs estão disponíveis. Deve conter um único array JSON de strings, onde cada string é o nome de um arquivo SBOM nesse diretório.
Por exemplo, se você tiver my-app.json e another-lib.json, o arquivo index.json deve ser assim:
[
"my-app.json",
"another-lib.json"
]
A aplicação então buscará o index.json para preencher o menu suspenso de seleção de SBOM e carregará o arquivo correspondente quando selecionado.
Abaixo está um exemplo de configuração .gitlab-ci.yml que busca uma release pré-construída, extrai SBOMs e cria dinamicamente o index.json para implantação.
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
Você pode ver um exemplo ao vivo desta configuração em ação aqui: https://security-dashboard-a9b4f8.gitlab.io/
Seu diretório final de implantação deve ter a seguinte estrutura:
dist/
├── assets/
│ └── ... (CSS and JS files)
├── index.html
└── sboms/
├── index.json
├── sbom1.json
├── sbom2.json
└── ...