Ir al contenido

SBOM - Software Bill of Materials

El módulo SBOM genera un documento JSON CycloneDX 1.4 que describe el directorio del plugin y sus dependencias. Es un artefacto estructural exigido por el art. 13 del Reglamento de Ciberresiliencia (CRA) de la UE y aceptado por la mayoría de los consumidores de SBOM (Trivy, Dependency-Track, Grype).

Ambos formatos están ampliamente aceptados. Se eligió CycloneDX 1.4 JSON porque su estructura es más sencilla, lo consumen directamente Trivy y Dependency-Track, y utiliza Package URLs (purl), que están disponibles de forma nativa para Composer y npm.

Vaya a Polski > SBOM. El módulo está activado de forma predeterminada. Para desactivarlo: Polski > Módulos > desmarque “SBOM”.

Para cada directorio de destino, el generador lee:

Archivo Contenido
vendor/composer/installed.json Paquetes PHP incluidos en el paquete del plugin
composer.lock Paquetes PHP (secciones packages y packages-dev)
package-lock.json Paquetes JavaScript, solo en una copia de desarrollo. El paquete publicado no incluye el archivo de bloqueo, así que las bibliotecas JavaScript empaquetadas en los scripts del plugin no se enumeran
Encabezado del plugin Nombre y versión (de la constante VERSION)

El generador se ejecuta únicamente bajo demanda. El JSON no se almacena en caché - la generación para un plugin FREE con alrededor de 100 dependencias tarda menos de 200 ms.

  • polski - el plugin FREE (WP_PLUGIN_DIR/polski o Polski\PLUGIN_DIR)
  • polski-pro - visible solo cuando PRO está instalado y están definidas las constantes Polski\Pro\PLUGIN_DIR / Polski\Pro\VERSION

El archivo se sirve con:

Content-Type: application/vnd.cyclonedx+json; charset=utf-8
Content-Disposition: attachment; filename="polski-sbom-<version>-<UTC timestamp>.cdx.json"

Ejemplo (truncado):

{
"bomFormat": "CycloneDX",
"specVersion": "1.4",
"serialNumber": "urn:uuid:5a3b....",
"version": 1,
"metadata": {
"timestamp": "2026-04-19T08:30:00+00:00",
"tools": [{ "vendor": "WPPoland", "name": "Polski SBOM generator", "version": "1.0" }],
"component": {
"type": "application",
"bom-ref": "wppoland/polski",
"name": "polski",
"version": "2.1.0",
"publisher": "WPPoland"
}
},
"components": [
{
"type": "library",
"bom-ref": "composer:woocommerce/woocommerce-blocks",
"name": "woocommerce/woocommerce-blocks",
"version": "10.8.4",
"scope": "required",
"purl": "pkg:composer/woocommerce/[email protected]",
"licenses": [{ "license": { "id": "GPL-3.0-or-later" } }]
}
]
}
Ventana de terminal
trivy sbom polski-sbom-2.1.0-20260419-083000.cdx.json
  1. Cree un proyecto en Dependency-Track (uno por plugin).
  2. Suba el JSON a través de la interfaz o del endpoint /api/v1/bom.
  3. Conecte el proyecto a una canalización de CI para que cada versión actualice el BOM.

El art. 13 del Reglamento de Ciberresiliencia exige a los fabricantes mantener SBOMs de sus productos. Guardar el JSON CycloneDX junto a la versión etiquetada es una forma habitual de cumplir esta obligación. El nombre del archivo incorpora la versión y la marca de tiempo UTC para que los artefactos sean únicos entre versiones.

  • Interfaz y descarga: manage_woocommerce
  • Nonce: polski_sbom_download (necesario para la acción POST)
  • Las relaciones de dependencias transitivas (árbol dependencies) aún no se emiten (solo lista plana)
  • WordPress en sí no es un componente del BOM (es el entorno de ejecución, no una dependencia empaquetada)
  • La versión se obtiene únicamente de las constantes del plugin, no del campo de composer.json
  • Sin firma HMAC en el BOM (prevista en PRO)