Como verificar um manifesto ou lockfile no OSV

Carregue um manifesto ou lockfile e clique em Verificar dependências: os nomes, versões e ecossistemas que puderam ser lidos são consultados na API do OSV, e a tabela mostra os avisos devolvidos com gravidade e versão corrigida. A análise acontece na página; só nomes de pacote, versões e ecossistemas são enviados.

Medido aqui: um package.json com oito dependências devolveu 13 resultados, o requirements.txt devolveu 107 resultados de cinco pacotes, e um manifesto com express 5.1.0, minimist 1.2.8 e chalk 5.3.0 não devolveu nenhum.

  1. Solte um manifesto ou lockfile, ou cole o texto: package.json, package-lock.json, yarn.lock, pnpm-lock.yaml, requirements.txt, pom.xml, um bom.json do CycloneDX ou linhas como "npm lodash 4.17.15".
  2. Clique em Verificar dependências. A linha de status mostra o progresso enquanto as versões são consultadas na API do OSV.
  3. Leia as métricas: pacotes verificados, resultados devolvidos e ecossistemas consultados.
  4. Leia a nota sob as métricas quando ela aparecer: quantos intervalos foram verificados na versão mais baixa declarada, quantas entradas não indicavam versão e se o limite de 100 pacotes deixou entradas de fora.
  5. Clique em Limpar antes do próximo arquivo: a caixa de texto, a tabela e as métricas são esvaziadas.

Quais arquivos são lidos, o que é consultado e o que significa um resultado vazio

Quais arquivos são lidos

Para npm: package.json (dependencies e devDependencies) e os três formatos de lockfile package-lock v1/v2/v3, yarn.lock e pnpm-lock.yaml. Para PyPI: requirements.txt. Para Maven: pom.xml, intervalos incluídos. Um bom.json do CycloneDX cobre npm, PyPI, Maven, NuGet, Go e crates.io. Linhas como "npm lodash 4.17.15" também são lidas. O lockfile é a melhor entrada, porque traz a versão realmente instalada e não a restrição.

Uma entrada que o leitor não consegue usar responde com uma frase em vez de uma exceção: um texto simples, um JSON malformado e linhas unidas por @ mostraram "Nenhuma dependência com versão foi encontrada" e a tabela ficou vazia.

O que é consultado

Intervalos são consultados na versão mais baixa declarada: Django>=2.2,<3.0 como 2.2 e o intervalo Maven [4.3.0,4.3.30] como 4.3.0. A coluna Versão mostra o texto do manifesto (">=2.2", "[4.3.0,4.3.30]") e não o valor consultado, para comparar com o arquivo de origem.

Entradas sem versão de registro ficam de fora e são contadas na nota: URL de git com tag, file:, workspace:*, latest, *, referências ${property} de um pom e um componente do CycloneDX sem purl. No máximo 100 pacotes são consultados; um manifesto de 120 entradas enviou exatamente 100 consultas e avisou isso sob as métricas.

O que os resultados significam

Cada linha é um aviso: pacote, versão verificada, identificador e resumo do aviso, gravidade e versão corrigida. Antes os detalhes eram buscados só para 40 avisos, o que deixava as linhas seguintes em Gravidade Unknown e Corrigido em "—"; agora são buscados para todos, e um manifesto com 83 avisos devolveu 83 linhas, cada uma com gravidade e com a versão corrigida que o OSV indica para aquele pacote.

Não encontrar resultados não significa que o pacote seja seguro: um aviso publicado depois desta análise não aparecerá, e um intervalo verificado na versão mais baixa deixa o restante sem verificação. Se a API do OSV estiver inacessível, a página diz isso em vez de mostrar um resultado limpo; um HTTP 503 é informado como tal. Os avisos são buscados de seis em seis, com limite de 20 segundos cada, então uma conexão travada não deixa a análise girando: essas linhas voltam com Gravidade Unknown.

Ferramentas recentes: