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).
Por qué CycloneDX y no SPDX
Sección titulada «Por qué CycloneDX y no SPDX»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.
Configuración
Sección titulada «Configuración»Vaya a Polski > SBOM. El módulo está activado de forma predeterminada. Para desactivarlo: Polski > Módulos > desmarque “SBOM”.
Fuentes
Sección titulada «Fuentes»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.
Destinos
Sección titulada «Destinos»polski- el plugin FREE (WP_PLUGIN_DIR/polskioPolski\PLUGIN_DIR)polski-pro- visible solo cuando PRO está instalado y están definidas las constantesPolski\Pro\PLUGIN_DIR/Polski\Pro\VERSION
El archivo se sirve con:
Content-Type: application/vnd.cyclonedx+json; charset=utf-8Content-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", "licenses": [{ "license": { "id": "GPL-3.0-or-later" } }] } ]}trivy sbom polski-sbom-2.1.0-20260419-083000.cdx.jsonDependency-Track
Sección titulada «Dependency-Track»- Cree un proyecto en Dependency-Track (uno por plugin).
- Suba el JSON a través de la interfaz o del endpoint
/api/v1/bom. - Conecte el proyecto a una canalización de CI para que cada versión actualice el BOM.
Contexto del CRA
Sección titulada «Contexto del CRA»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.
Permisos
Sección titulada «Permisos»- Interfaz y descarga:
manage_woocommerce - Nonce:
polski_sbom_download(necesario para la acción POST)
Limitaciones
Sección titulada «Limitaciones»- 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)