Cómo comprobar un manifiesto o un lockfile contra OSV

Carga un manifiesto o un lockfile y pulsa Analizar dependencias: los nombres, versiones y ecosistemas que se han podido leer se consultan en la API de OSV y la tabla muestra los avisos devueltos con su gravedad y su versión corregida. El análisis ocurre en la página; solo se envían nombres de paquete, versiones y ecosistemas.

Medido aquí: un package.json con ocho dependencias devolvió 13 hallazgos, requirements.txt devolvió 107 hallazgos de cinco paquetes y un manifiesto con express 5.1.0, minimist 1.2.8 y chalk 5.3.0 no devolvió ninguno.

  1. Suelta un manifiesto o un lockfile, o pega su texto: package.json, package-lock.json, yarn.lock, pnpm-lock.yaml, requirements.txt, pom.xml, un bom.json de CycloneDX o líneas como «npm lodash 4.17.15».
  2. Pulsa Analizar dependencias. La línea de estado muestra el avance mientras se consultan las versiones en la API de OSV.
  3. Lee las métricas: paquetes comprobados, hallazgos devueltos y ecosistemas consultados.
  4. Lee la nota bajo las métricas cuando aparezca: cuántos rangos se consultaron en su versión declarada más baja, cuántas entradas no indicaban ninguna versión y si el límite de 100 paquetes dejó entradas fuera.
  5. Pulsa Limpiar antes del siguiente archivo: vacía el cuadro de texto, la tabla y las métricas.

Qué archivos se leen, qué se consulta y qué significa un resultado vacío

Qué archivos se leen

Para npm: package.json (dependencies y devDependencies) y los tres formatos de lockfile package-lock v1/v2/v3, yarn.lock y pnpm-lock.yaml. Para PyPI: requirements.txt. Para Maven: pom.xml, intervalos incluidos. Un bom.json de CycloneDX cubre npm, PyPI, Maven, NuGet, Go y crates.io. También se leen líneas como «npm lodash 4.17.15». Conviene usar el lockfile: contiene la versión realmente instalada, no la restricción.

Una entrada que el lector no puede usar responde con una frase en lugar de una excepción: un texto plano, un JSON mal formado y líneas unidas con @ mostraron «No se encontraron dependencias con versión» y la tabla quedó vacía.

Qué se consulta

Los rangos se consultan en su versión declarada más baja: Django>=2.2,<3.0 como 2.2 y el intervalo Maven [4.3.0,4.3.30] como 4.3.0. La columna Versión muestra el texto del manifiesto («>=2.2», «[4.3.0,4.3.30]») y no el valor consultado, para poder contrastarlo con el archivo.

Las entradas que no indican ninguna versión de registro se omiten y se cuentan en la nota: URL de git con etiqueta, file:, workspace:*, latest, *, referencias ${property} de un pom y un componente CycloneDX sin purl. Se consultan como máximo 100 paquetes; un manifiesto de 120 entradas envió exactamente 100 consultas y lo indicó bajo las métricas.

Qué significan los resultados

Cada fila es un aviso: paquete, versión comprobada, identificador y resumen del aviso, gravedad y versión corregida. Antes solo se pedían los detalles de 40 avisos, así que las filas siguientes quedaban en Gravedad Unknown y Corregido en «—»; ahora se piden todos, y un manifiesto con 83 avisos devolvió 83 filas, cada una con su gravedad y con la versión corregida que OSV indica para ese paquete.

No hallar avisos no significa que el paquete sea seguro: un aviso publicado después de este análisis no aparecerá, y si un rango se consulta en su versión más baja, el resto del rango queda sin comprobar. Si no se puede contactar con la API de OSV, la página lo dice en lugar de mostrar un resultado limpio; un HTTP 503 se informa como tal. Los avisos se piden de seis en seis con un límite de 20 segundos cada uno, así que una conexión que se queda colgada no deja el análisis girando: esas filas vuelven con Gravedad Unknown.

Herramientas recientes: