SBOM - Software Bill of Materials
Das Modul SBOM erzeugt ein CycloneDX 1.4-JSON-Dokument, das das Plugin-Verzeichnis und seine Abhängigkeiten beschreibt. Es ist ein strukturelles Artefakt, das nach Art. 13 des EU Cyber Resilience Act erforderlich ist und von den meisten SBOM-Verbrauchern (Trivy, Dependency-Track, Grype) akzeptiert wird.
Warum CycloneDX und nicht SPDX
Section titled “Warum CycloneDX und nicht SPDX”Beide Formate sind weit verbreitet. CycloneDX 1.4 JSON wurde gewählt, weil die Struktur einfacher ist, direkt von Trivy und Dependency-Track verarbeitet wird und Package URLs (purl) verwendet, die für Composer und npm standardmäßig mitgeliefert werden.
Konfiguration
Section titled “Konfiguration”Gehen Sie zu Polski > SBOM. Das Modul ist standardmäßig aktiviert. Zum Deaktivieren: Polski > Module > Haken bei “SBOM” entfernen.
Quellen
Section titled “Quellen”Für jedes Zielverzeichnis liest der Generator:
| Datei | Inhalt |
|---|---|
composer.lock | PHP-Pakete (Abschnitte packages und packages-dev) |
package-lock.json | JavaScript-Pakete (Map packages unter node_modules/...) |
| Plugin-Header | Name und Version (aus der Konstante VERSION) |
Der Generator läuft ausschließlich auf Anforderung. Das JSON wird nicht zwischengespeichert - die Erzeugung für ein FREE-Plugin mit rund 100 Abhängigkeiten dauert unter 200 ms.
polski- das FREE-Plugin (WP_PLUGIN_DIR/polskioderPolski\PLUGIN_DIR)polski-pro- nur sichtbar, wenn PRO installiert ist und die KonstantenPolski\Pro\PLUGIN_DIR/Polski\Pro\VERSIONdefiniert sind
Ausgabe
Section titled “Ausgabe”Die Datei wird ausgeliefert mit:
Content-Type: application/vnd.cyclonedx+json; charset=utf-8Content-Disposition: attachment; filename="polski-sbom-<version>-<UTC timestamp>.cdx.json"Beispiel (gekürzt):
{ "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" } }] } ]}Verwendung
Section titled “Verwendung”trivy sbom polski-sbom-2.1.0-20260419-083000.cdx.jsonDependency-Track
Section titled “Dependency-Track”- Legen Sie ein Projekt in Dependency-Track an (eines pro Plugin).
- Laden Sie das JSON über die Oberfläche oder den Endpunkt
/api/v1/bomhoch. - Verbinden Sie das Projekt mit einer CI-Pipeline, sodass jedes Release die BOM aktualisiert.
CRA-Kontext
Section titled “CRA-Kontext”Art. 13 des Cyber Resilience Act verpflichtet Hersteller, SBOMs für ihre Produkte vorzuhalten. Das CycloneDX-JSON neben dem getaggten Release abzulegen ist eine gängige Möglichkeit, dieser Pflicht nachzukommen. Der Dateiname enthält die Version und den UTC-Zeitstempel, damit die Artefakte über Releases hinweg eindeutig bleiben.
Berechtigungen
Section titled “Berechtigungen”- Oberfläche und Download:
manage_woocommerce - Nonce:
polski_sbom_download(für die POST-Aktion erforderlich)
Einschränkungen
Section titled “Einschränkungen”- Transitive Abhängigkeitsbeziehungen (
dependencies-Baum) werden noch nicht ausgegeben (nur flache Liste) - WordPress selbst ist keine Komponente in der BOM (es ist die Laufzeitumgebung, keine gebündelte Abhängigkeit)
- Version wird nur aus den Plugin-Konstanten ermittelt - nicht aus dem Feld in
composer.json - Keine HMAC-Signatur auf der BOM (in PRO geplant)