Shapin

Projekte, die den nachfolgenden Best Practices folgen, können sich freiwillig selbst zertifizieren und zeigen, dass sie einen Core-Infrastruktur-Initiative-/OpenSSF-Badge erhalten haben.

Es gibt keine Auswahl an Praktiken, die garantieren können, dass Software niemals Fehler oder Schwachstellen hat. Selbst formale Methoden können fehlschlagen, wenn die Spezifikationen oder Annahmen falsch sind. Auch gibt es keine Auswahl an Praktiken, die garantieren können, dass ein Projekt eine gesunde und gut funktionierende Entwicklungsgemeinschaft erhalten wird. Allerdings können Best Practices dabei helfen, die Ergebnisse von Projekten zu verbessern. Zum Beispiel ermöglichen einige Praktiken die Mehrpersonen-Überprüfung vor der Freigabe, die sowohl helfen können ansonsten schwer zu findende technische Schwachstellen zu finden und gleichzeitig dazu beitragen Vertrauen und den Wunsch nach wiederholter Zusammenarbeit zwischen Entwicklern verschiedener Unternehmen zu schaffen. Um ein Badge zu verdienen, müssen alle MÜSSEN und MÜSSEN NICHT Kriterien erfüllt sein, alle SOLLTEN Kriterien müssen erfüllt sein oder eine Rechtfertigung enthalten, und alle EMPFHOLEN Kriterien müssen erfüllt sein oder nicht (wir wollen sie zumindest berücksichtigt wissen). Wenn lediglich ein allgemeiner Kommentar angebeben werden soll, keine direkte Begründung, dann ist das erlaubt, wenn der Text mit "//" und einem Leerzeichen beginnt. Feedback ist willkommen auf derGitHub-Website als Issue oder Pull-Request. Es gibt auch eine E-Mail-Liste für allgemeine Diskussionen.

Wir stellen Ihnen gerne die Informationen in mehreren Sprachen zur Verfügung, allerdings ist die englische Version maßgeblich, insbesondere wenn es Konflikte oder Inkonsistenzen zwischen den Übersetzungen gibt.
Wenn dies Ihr Projekt ist, zeigen Sie bitte Ihren Baseline-Badge-Status auf Ihrer Projektseite! Der Baseline-Badge-Status sieht so aus: Baseline-Badge-Level für Projekt 12470 ist baseline-3 So betten Sie das Baseline-Badge ein:
Sie können Ihren Baseline-Badge-Status anzeigen, indem Sie Folgendes in Ihre Markdown-Datei einbetten:
[![OpenSSF Baseline](https://www.bestpractices.dev/projects/12470/baseline)](https://www.bestpractices.dev/projects/12470)
oder indem Sie Folgendes in Ihr HTML einbetten:
<a href="https://www.bestpractices.dev/projects/12470"><img src="https://www.bestpractices.dev/projects/12470/baseline"></a>


Dies sind die Baseline Niveau 2 Kriterien. Diese Kriterien stammen aus der Basisversion v2025.10.10 mit aktualisierten Kriterientexten aus Version v2026.02.19. Kriterien, die in Version v2026.02.19 neu sind, sind als "zukünftig" gekennzeichnet und werden ab dem 2026-06-01 durchgesetzt. Bitte beantworten Sie die "zukünftigen" Kriterien vor diesem Datum.

Baseline Series: Baseline Niveau 1 Baseline Niveau 2 Baseline Niveau 3

        

 Grundlagen

  • Allgemein

    Hinweis: Andere Projekte können den selben Namen benutzen.

    Pin floating tags in CI workflow files to immutable SHAs, making your pipelines reproducible and immune to tag mutation attacks.

    Bitte verwenden Sie das SPDX-License-Expression-Format; Beispiele sind "Apache-2.0", "BSD-2-Clause", "BSD-3-Clause", "GPL-2.0+", "LGPL-3.0+", "MIT" und "(BSD-2-Clause OR Ruby)". Geben sie nicht die einfachen oder doppelten Anführungszeichen mit an.
    Wenn es mehr als eine Programmiersprache gibt, listen Sie sie als kommagetrennte Werte (Leerzeichen sind optional) auf und sortieren Sie sie von am häufigsten zum am wenigsten verwendeten. Wenn es eine lange Liste gibt, bitte mindestens die ersten drei häufigsten auflisten. Wenn es keine Programmiersprache gibt (z. B. ist dies nur ein Dokumentations- oder Testprojekt), verwenden Sie das einzelne Zeichen "-". Bitte verwenden Sie eine herkömmliche Großschreibung für jede Sprache, z.B. "JavaScript".
    Das Common Platform Enumeration (CPE) ist ein strukturiertes Namensschema für IT-Systeme, Software und Pakete. Es wird in diversen Systemen und Datenbanken bei der Meldung von Schwachstellen verwendet.

 Steuerelemente 19/19

  • Steuerelemente


    Wenn eine CI/CD-Aufgabe ohne angegebene Berechtigungen ausgeführt wird, MUSS das CI/CD-System die Berechtigungen der Aufgabe standardmäßig auf die niedrigsten in der Pipeline gewährten Berechtigungen setzen. [OSPS-AC-04.01]
    Konfigurieren Sie die Einstellungen des Projekts so, dass neuen Pipelines standardmäßig die niedrigsten verfügbaren Berechtigungen zugewiesen werden, wobei zusätzliche Berechtigungen nur bei Bedarf für bestimmte Aufgaben gewährt werden.

    The CI/CD pipeline sets permissions: read-all at the top level of both ci.yml and release.yml, establishing a read-only default for all jobs. Individual jobs then explicitly declare only the minimum permissions they require (e.g. security-events: write for SARIF upload, contents: write for release creation, id-token: write for cosign signing). Any job without an explicit permissions block inherits the restrictive read-all default.



    Wenn ein offizieller Release erstellt wird, MUSS diesem Release eine eindeutige Versionskennung zugewiesen werden. [OSPS-BR-02.01]
    Weisen Sie jedem vom Projekt erstellten Release eine eindeutige Versionskennung zu und folgen Sie dabei einer konsistenten Namenskonvention oder einem Nummerierungsschema. Beispiele sind SemVer, CalVer oder Git-Commit-ID.

    All releases are tagged with a unique semantic version identifier (e.g. v1.2.0) via Git tags. The release workflow is triggered exclusively on push: tags: "v*", ensuring every GitHub Release is tied to a unique, immutable version tag. The version is also embedded into the binary at build time via -X main.Version=${GITHUB_REF_NAME} ldflags.



    Wenn ein offizieller Release erstellt wird, MUSS dieser Release ein beschreibendes Protokoll funktionaler und sicherheitsrelevanter Änderungen enthalten. [OSPS-BR-04.01]
    Stellen Sie sicher, dass alle Releases ein beschreibendes Änderungsprotokoll enthalten. Es wird empfohlen sicherzustellen, dass das Änderungsprotokoll von Menschen lesbar ist und Details über Commit-Nachrichten hinaus enthält, wie z.B. Beschreibungen der Sicherheitsauswirkung oder Relevanz für verschiedene Anwendungsfälle. Um Maschinenlesbarkeit zu gewährleisten, platzieren Sie den Inhalt unter einer Markdown-Überschrift wie "## Changelog".

    Every release automatically generates a changelog via orhun/git-cliff-action using conventional commits, grouped by type (Features, Bug Fixes, Refactoring, CI, etc.) and published as the GitHub Release body. The changelog includes a full diff link to the previous version. This is configured in cliff.toml and executed as part of the release workflow on every tag push.



    Wenn eine Build- und Release-Pipeline Abhängigkeiten einbindet, MUSS sie standardisierte Tools verwenden, wo verfügbar. [OSPS-BR-05.01]
    Verwenden Sie ein gängiges Tool für Ihr Ökosystem, wie z.B. Paketmanager oder Abhängigkeits-Management-Tools, um Abhängigkeiten zur Build-Zeit einzubinden. Dies kann die Verwendung einer Abhängigkeitsdatei, Lock-Datei oder Manifest umfassen, um die erforderlichen Abhängigkeiten zu spezifizieren, die dann vom Build-System eingezogen werden.

    The build pipeline uses standard Go tooling (go build, go mod) to resolve and ingest dependencies declared in go.mod and go.sum. The Docker image is built via docker/build-push-action. All dependency versions are pinned — Go module checksums are verified by the Go toolchain via go.sum, and GitHub Actions dependencies are pinned to immutable commit SHAs. Dependabot is configured to keep both Go module and Actions dependencies up to date.



    Wenn ein offizieller Release erstellt wird, MUSS dieser Release signiert sein oder in einem signierten Manifest erfasst werden, das die kryptographischen Hashes jedes Assets enthält. [OSPS-BR-06.01]
    Signieren Sie alle freigegebenen Software-Assets zur Build-Zeit mit einer kryptographischen Signatur oder Attestierungen, wie z.B. GPG- oder PGP-Signatur, Sigstore-Signaturen, SLSA-Provenance oder SLSA-VSAs. Fügen Sie die kryptographischen Hashes jedes Assets in eine signierte Manifest- oder Metadaten-Datei ein.

    Every release asset is signed using two complementary mechanisms:

    cosign sign-blob — each binary is signed with a Sigstore bundle (.bundle file) uploaded alongside the release assets, providing keyless signing via the Sigstore transparency log.
    actions/attest-build-provenance — SLSA provenance attestations are generated for all build artifacts, cryptographically linking each binary to its source commit and build environment.
    checksums.txt — a SHA-256 manifest of all release assets is included in every release, allowing users to verify integrity independently. The Docker image is additionally signed with cosign sign against its digest.



    Wenn das Projekt ein Release erstellt hat, MUSS die Projektdokumentation eine Beschreibung enthalten, wie das Projekt seine Abhängigkeiten auswählt, bezieht und verfolgt. [OSPS-DO-06.01]
    Es wird empfohlen, diese Informationen zusammen mit der technischen und Design-Dokumentation des Projekts auf einer öffentlich zugänglichen Ressource wie dem Quellcode-Repository, der Projektwebsite oder einem anderen Kanal zu veröffentlichen.

    Documented in the Dependencies section of README.md. Dependencies are selected for minimal footprint, declared and pinned in go.mod/go.sum, verified by the Go checksum database on every build, and tracked weekly by Dependabot with automated PRs for updates.



    (Zukünftiges Kriterium) Die Projektdokumentation MUSS Anweisungen enthalten, wie die Software gebaut wird, einschließlich erforderlicher Bibliotheken, Frameworks, SDKs und Abhängigkeiten. [OSPS-DO-07.01]
    Es wird empfohlen, diese Informationen zusammen mit der Beiträgerdokumentation des Projekts zu veröffentlichen, z. B. in CONTRIBUTING.md oder anderen Entwickleraufgabendokumentationen. Dies kann auch mithilfe von Makefile-Zielen oder anderen Automatisierungsskripten dokumentiert werden.

    The README.md includes a Build from source section documenting the only prerequisite (Go 1.24+) and the exact build command. The go.mod file specifies the minimum Go version. No additional libraries, frameworks, or SDKs beyond the standard Go toolchain are required.



    Während aktiv, MUSS die Projektdokumentation eine Liste von Projektmitgliedern mit Zugriff auf sensible Ressourcen enthalten. [OSPS-GV-01.01]
    Dokumentieren Sie Projektteilnehmer und ihre Rollen durch Artefakte wie members.md, governance.md, maintainers.md oder eine ähnliche Datei im Quellcode-Repository des Projekts. Dies kann so einfach sein wie die Aufnahme von Namen oder Account-Handles in einer Liste von Maintainern, oder komplexer sein, abhängig von der Governance des Projekts.

    The list of project members with access to sensitive resources is publicly visible on the GitHub repository at https://github.com/Kirskov/Shapin/graphs/contributors and via the repository's collaborators page. As a single-maintainer project, only the repository owner (Kirskov) has access to sensitive resources such as secrets, release publishing, and package registry credentials.



    Während aktiv, MUSS die Projektdokumentation Beschreibungen der Rollen und Verantwortlichkeiten für Mitglieder des Projekts enthalten. [OSPS-GV-01.02]
    Dokumentieren Sie Projektteilnehmer und ihre Rollen durch Artefakte wie members.md, governance.md, maintainers.md oder ähnliche Dateien im Quellcode-Repository des Projekts.

    MAINTAINERS.md at the repository root lists all project members with their roles and responsibilities. It defines the Maintainer role (merge access, release publishing, sensitive resource access) and Contributor role (no privileged access), and identifies the current maintainer.



    Während das Projekt aktiv ist, MUSS die Projektdokumentation einen Leitfaden für Code-Beitragende enthalten, der Anforderungen für akzeptable Beiträge beinhaltet. [OSPS-GV-03.02]
    Erweitern Sie die Inhalte von CONTRIBUTING.md oder CONTRIBUTING/ in der Projektdokumentation, um die Anforderungen für akzeptable Beiträge zu beschreiben, einschließlich Codierungsstandards, Testanforderungen und Einreichungsrichtlinien für Code-Beitragende. Es wird empfohlen, dass dieser Leitfaden die verbindliche Quelle sowohl für Beitragende als auch für Genehmiger ist.

    CONTRIBUTING.md documents requirements for acceptable contributions including: coding standards (gofmt, go vet, no new dependencies without discussion), testing requirements (all new code must have tests, bug fixes need regression tests, full suite must pass), security requirements (no hardcoded credentials, HTTPS-only HTTP calls), and PR submission guidelines (single concern per PR, all CI checks must pass before review).



    Während das Projekt aktiv ist, MUSS das Versionskontrollsystem von allen Code-Beitragenden verlangen, dass sie bei jedem Commit bestätigen, dass sie rechtlich berechtigt sind, die zugehörigen Beiträge zu leisten. [OSPS-LE-01.01]
    Fügen Sie ein DCO in das Repository des Projekts ein, das Code-Beitragende dazu verpflichtet zu bestätigen, dass sie rechtlich berechtigt sind, die zugehörigen Beiträge bei jedem Commit zu leisten. Verwenden Sie eine Statusüberprüfung, um sicherzustellen, dass die Bestätigung erfolgt ist. Ein CLA erfüllt diese Anforderung ebenfalls. Einige Versionskontrollsysteme, wie GitHub, können dies in den Nutzungsbedingungen der Plattform enthalten.

    The DCO file is included in the repository root containing the Developer Certificate of Origin v1.1. The .github/workflows/dco.yml workflow runs on every PR and fails if any commit is missing a Signed-off-by trailer. Instructions for contributors are documented in CONTRIBUTING.md.



    Wenn ein Commit in den primären Branch erfolgt, MÜSSEN alle automatisierten Statusüberprüfungen für Commits bestanden werden oder manuell umgangen werden. [OSPS-QA-03.01]
    Konfigurieren Sie das Versionskontrollsystem des Projekts so, dass alle automatisierten Statusüberprüfungen bestanden werden müssen oder eine manuelle Bestätigung erforderlich ist, bevor ein Commit in den primären Branch zusammengeführt werden kann. Es wird empfohlen, dass optionale Statusüberprüfungen NICHT als Bestehen-oder-Durchfallen-Anforderung konfiguriert werden, die Genehmiger versucht sein könnten zu umgehen.

    Branch protection on main requires all CI status checks (test, codeql, gosec, grype, dco) to pass before a PR can be merged. Manual bypass is restricted by the "Do not allow bypassing the above settings" option, which applies to administrators as well.



    Bevor ein Commit akzeptiert wird, MÜSSEN die CI/CD-Pipelines des Projekts mindestens eine automatisierte Test-Suite ausführen, um sicherzustellen, dass die Änderungen den Erwartungen entsprechen. [OSPS-QA-06.01]
    Automatisierte Tests sollten vor jedem Merge in den primären Branch ausgeführt werden. Die Test-Suite sollte in einer CI/CD-Pipeline ausgeführt werden und die Ergebnisse sollten für alle Beitragenden sichtbar sein. Die Test-Suite sollte in einer konsistenten Umgebung ausgeführt werden und so ausgeführt werden, dass Beitragende die Tests lokal ausführen können. Beispiele für Test-Suites sind Unit-Tests, Integrationstests und End-to-End-Tests.

    The ci.yml workflow runs go test ./... on every push to main and every pull request targeting main. The test suite covers unit and integration tests across all providers and the scanner package. Results are publicly visible in the GitHub Actions tab. Contributors can run the same suite locally with go test ./... — no special environment or secrets required, as all tests use fake HTTP servers via net/http/httptest.



    Wenn das Projekt eine Veröffentlichung vorgenommen hat, MUSS die Projektdokumentation Design-Dokumentation enthalten, die alle Aktionen und Akteure innerhalb des Systems demonstriert. [OSPS-SA-01.01]
    Fügen Sie Designs in die Projektdokumentation ein, die die Aktionen und Akteure erklären. Akteure umfassen jedes Subsystem oder jede Entität, die ein anderes Segment im System beeinflussen kann. Stellen Sie sicher, dass dies für neue Funktionen oder Breaking Changes aktualisiert wird.

    ARCHITECTURE.md documents all actors (User, CLI, Scanner, Providers, Docker Resolver, external APIs), their responsibilities, and the complete data flow from invocation to file rewriting. It includes the provider interface contract, the concurrency model, and a table of all external API interactions. It is linked from the README and will be updated for new providers or breaking changes.



    Wenn das Projekt eine Veröffentlichung vorgenommen hat, MUSS die Projektdokumentation Beschreibungen aller externen Software-Schnittstellen der veröffentlichten Software-Assets enthalten. [OSPS-SA-02.01]
    Dokumentieren Sie alle Software-Schnittstellen (APIs) der veröffentlichten Software-Assets und erklären Sie, wie Benutzer mit der Software interagieren können und welche Daten erwartet oder produziert werden. Stellen Sie sicher, dass dies für neue Funktionen oder Breaking Changes aktualisiert wird.

    All external software interfaces are documented in ARCHITECTURE.md under "External software interfaces": the CLI (all flags, inputs, outputs, exit codes), the .shapin.json config file schema, the JSON output schema, and the SARIF 2.1.0 output format. The README cross-references these with full usage examples. This documentation is updated alongside any new flags or breaking changes.



    Wenn das Projekt eine Veröffentlichung vorgenommen hat, MUSS das Projekt eine Sicherheitsbewertung durchführen, um die wahrscheinlichsten und folgenschwersten potenziellen Sicherheitsprobleme zu verstehen, die innerhalb der Software auftreten könnten. [OSPS-SA-03.01]
    Die Durchführung einer Sicherheitsbewertung informiert sowohl Projektmitglieder als auch nachgelagerte Verbraucher darüber, dass das Projekt versteht, welche Probleme innerhalb der Software auftreten könnten. Das Verständnis darüber, welche Bedrohungen realisiert werden könnten, hilft dem Projekt, Risiken zu verwalten und anzugehen. Diese Informationen sind für nachgelagerte Verbraucher nützlich, um den Sicherheitssachverstand und die Praktiken des Projekts zu demonstrieren. Stellen Sie sicher, dass dies für neue Funktionen oder Breaking Changes aktualisiert wird.

    SECURITY.md includes a full security assessment covering scope, trust boundaries, and six identified threats (compromised upstream API, directory traversal, token leakage, regex DoS, malicious config file, supply chain compromise of Shapin itself) with impact ratings, mitigations, and residual risk for each. Out-of-scope items are also documented.



    Während das Projekt aktiv ist, MUSS die Projektdokumentation eine Richtlinie für koordinierte Offenlegung von Schwachstellen (CVD) mit einem klaren Zeitrahmen für die Reaktion enthalten. [OSPS-VM-01.01]
    Erstellen Sie eine SECURITY.md-Datei im Stammverzeichnis, die die Richtlinie des Projekts für koordinierte Offenlegung von Schwachstellen beschreibt. Fügen Sie eine Methode zur Meldung von Schwachstellen hinzu. Setzen Sie Erwartungen dafür, wie das Projekt reagieren und gemeldete Probleme angehen wird.

    SECURITY.md at the repository root defines the coordinated vulnerability disclosure policy: reporters must use private email (not public issues), must include description, reproduction steps, and impact. The project commits to a 7-day response SLA, a fix as soon as possible upon confirmation, and credit in release notes. GitHub also surfaces this file automatically via the "Report a vulnerability" button on the Security tab.



    Während das Projekt aktiv ist, MUSS die Projektdokumentation eine Möglichkeit zur privaten Meldung von Schwachstellen direkt an die Sicherheitskontakte innerhalb des Projekts bieten. [OSPS-VM-03.01]
    Bieten Sie Sicherheitsforschern eine Möglichkeit, Schwachstellen privat an das Projekt zu melden. Dies kann eine dedizierte E-Mail-Adresse, ein Webformular, spezialisierte VCS-Tools, E-Mail-Adressen für Sicherheitskontakte oder andere Methoden sein.

    SECURITY.md provides two private reporting channels: GitHub's native private vulnerability reporting (via the Security tab → "Report a vulnerability") and a dedicated private email address. Both are documented at the repository root where GitHub surfaces them automatically to security researchers.



    Während das Projekt aktiv ist, MUSS die Projektdokumentation öffentlich Daten über entdeckte Schwachstellen veröffentlichen. [OSPS-VM-04.01]
    Bereitstellen von Informationen über bekannte Schwachstellen in einem vorhersehbaren öffentlichen Kanal, wie z.B. einem CVE-Eintrag, Blogbeitrag oder einem anderen Medium. Soweit möglich sollten diese Informationen betroffene Version(en) enthalten, wie ein Verbraucher feststellen kann, ob er betroffen ist, und Anweisungen zur Schadensbegrenzung oder Behebung.

    Vulnerability disclosures are published as GitHub Security Advisories at the repository's Security Advisories page, including affected versions, vulnerability description, and upgrade instructions. Fix releases reference the advisory in the changelog. This is documented in SECURITY.md.



Diese Daten sind unter der Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0) verfügbar. Dies bedeutet, dass ein Datenempfänger die Daten mit oder ohne Änderungen weitergeben darf, solange der Datenempfänger den Text dieser Vereinbarung mit den weitergegebenen Daten zur Verfügung stellt. Bitte nennen Sie Antoine GRICOURT und die OpenSSF Best Practices Badge-Mitwirkenden als Urheber.

Projekt-Badge-Eintrag im Besitz von: Antoine GRICOURT.
Eintrag erstellt: 2026-04-12 08:01:17 UTC, zuletzt aktualisiert: 2026-04-12 09:20:06 UTC.