Basis CLI

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 Badge-Status auf Ihrer Projektseite! Der Badge-Status sieht so aus: Badge-Level für Projekt 14224 ist silver So können Sie ihn einbetten:
Sie können Ihren Badge-Status anzeigen, indem Sie Folgendes in Ihre Markdown-Datei einbetten:
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/14224/badge)](https://www.bestpractices.dev/projects/14224)
oder indem Sie Folgendes in Ihr HTML einbetten:
<a href="https://www.bestpractices.dev/projects/14224"><img src="https://www.bestpractices.dev/projects/14224/badge"></a>


Dies sind die Kriterien das Level Gold. Sie können auch die Kriterien für die Level Passing oder Silber sehen.

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

        

 Grundlagen 4/5

  • Allgemein

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

    Basis CLI is the command-line client for Basis Network. This repository — and this badge entry — is what distributes and verifies it: the download script that checks every binary against a SHA-256 committed to git, the checksums themselves, the release workflow that verifies each published asset and then signs it with Sigstore in keyless mode, the test suite covering all of that, and the documentation. The compiled basis binary is built from basis-core, which is not public yet. Everything in this repository is Apache-2.0 with its source, and every file carries its copyright and licence, checked in CI against version 3.3 of the REUSE Specification.

    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.
  • Voraussetzungen


    Das Projekt MUSS ein Silber-Siegel erreichen. [achieve_silver]

  • Projektüberwachung


    Das Projekt MUSS einen "Busfaktor" von 2 oder mehr haben. (URL erforderlich) [bus_factor]
    Ein "bus factor" (aka "LKW-Faktor") ist die minimale Anzahl von Projektmitgliedern, die plötzlich aus einem Projekt ("hit by a bus") verschwinden müssen, bevor das Projekt aufgrund fehlender kompetenter Mitarbeiter stockt. Das Truck-Factor-Tool kann dies für Projekte auf GitHub schätzen. Weitere Informationen finden Sie unter Bewertung des Busfaktors von Git-Repositories von Cosentino et al.

    Two. Both maintainers have identical repository and organisation access and either can release on their own, which is what the criterion measures. Being exact about what that buys is worth more than the number: it removes the single point of failure for access, for releases and for a vulnerability report going unread. It does not yet mean every change gets a second pair of eyes — that is two_person_review at gold level, and this project does not claim it. GOVERNANCE.md says both of those things in the same paragraph. https://github.com/basis-network/basis-cli/blob/main/GOVERNANCE.md#who-decides



    Das Projekt MUSS mindestens zwei unabhängige bedeutende Entwickler haben. (URL erforderlich) [contributors_unassociated]
    Die Mitwirkenden sind assoziiert, wenn sie von der gleichen Organisation (als Angestellter oder Auftragnehmer) bezahlt werden und die Organisation von den Ergebnissen des Projekts profitieren wird. Finanzielle Zuschüsse aus derselben Organisation zählen nicht, wenn sie durch andere Organisationen gehen (z.B. werden wissenschaftliche Zuschüsse, die an verschiedene Organisationen von einer gemeinsamen Regierung oder NGO-Quelle gezahlt werden, nicht dazu führen, dass die Mitwirkenden assoziiert werden). Jemand ist ein/e wichtige/r Mitwirkende/r, wenn sie/er im vergangenen Jahr nicht-triviale Beiträge zum Projekt geleistet hat. Beispiele für gute Indikatoren für einen bedeutenden Mitwirkenden sind: mindestens 1.000 Zeilen Code geschrieben, 50 Commits erarbeitet oder mindestens 20 Seiten zur Dokumentation beigetragen.

    The criterion asks for two unassociated significant contributors, and defines significant as non-trivial contributions in the past year — its own examples are 1,000 lines of code, 50 commits, or 20 pages of documentation. This repository has one: sebastian-quintero-osorio, with 17 commits. The second maintainer holds equal access and is an owner of the organisation, which is what makes access_continuity and bus_factor true, but has not yet contributed code or documentation, so counting him here would be counting the wrong thing. The remaining commits are Dependabot's. This is answered Unmet rather than optimistically, because it is checkable in one request against https://api.github.com/repos/basis-network/basis-cli/contributors — and because the honest version is more useful to a reader than a claim that does not survive that check.


  • Andere


    Das Projekt MUSS eine Lizenzerklärung in jeder Quelldatei enthalten. Dies DARF als Kommentar relativ am Anfangs jeder Datei einfügt sein: SPDX-License-Identifier: [SPDX license expression for project]. [license_per_file]
    Dies DARF auch durch die Einbeziehung einer Erklärung in natürlicher Sprache geschehen, die die Lizenz kennzeichnet. Das Projekt DARF auch eine stabile URL enthalten, die auf den Lizenztext oder den vollständigen Lizenztext hinweist. Beachten Sie, dass das Kriterium license_location die Projektlizenz an einem Standardstandort benötigt. Weitere Informationen zu SPDX-Lizenzausdrücken finden Sie unter SPDX-Tutorial . Beachten Sie die Beziehung zu copyright_per_file , deren Inhalt typischerweise den Lizenzinformationen vorausgeht.

    Same mechanism, same enforcement: every file carries SPDX-License-Identifier: Apache-2.0, inline where there is a comment syntax and through REUSE.toml where there is not. LICENSES/Apache-2.0.txt holds the licence text in the location REUSE expects. reuse lint reports the project as compliant and is a required check on main, so this cannot drift.


 Verbesserungs-/Nacharbeits-Kontrolle 3/4

  • Öffentliches Versionskontroll-Source-Repository


    Das Source-Repository des Projekts MUSS eine geläufige, verteilte Versionskontrollsoftware (z. B. git oder mercurial) verwenden. [repo_distributed]
    Git ist nicht speziell gefordert und Projekte können andere zentralisierte Versionskontrollsoftware (wie z. B. Subversion) mit Rechtfertigung verwenden.

    git.

    Warnung: Erfordert eine längere Begründung.



    Das Projekt MUSS eindeutig kleine Aufgaben identifizieren, die von neuen oder gelegentlichen Mitwirkenden durchgeführt werden können. (URL erforderlich) [small_tasks]
    Diese Identifizierung erfolgt in der Regel durch die Markierung ausgewählter Ausgaben in einem Issue-Tracker mit einem oder mehreren Tags, die das Projekt für den Zweck verwendet, z.B. up-for-Grabs , First-Timers-only , "Small fix", Microtask oder IdealFirstBug. Diese neuen Aufgaben müssen nicht das Hinzufügen von Funktionalität beinhalten. Sie können die Dokumentation verbessern, Testfälle hinzufügen oder irgendetwas anderes, das das Projekt unterstützt und den Mitwirkenden hilft mehr über das Projekt zu verstehen.

    Two ways in, both real. CONTRIBUTING.md has a "Good first tasks" section listing five kinds of contribution sized for someone new — covering a statement make coverage reports as missed, trying the script on a platform the project does not have, correcting documentation, improving an error message, and independently checking a published checksum by hand. And there are open issues labelled good first issue, each one a genuine defect or gap rather than invented busywork: download.sh not checking for curl before using it, testing the macOS shasum fallback on an actual Mac, documenting the three BASIS_CLI_* environment variables, and a test case for a checksum file with CRLF line endings. Each issue says what the task is, why it matters, and which file to start in. https://github.com/basis-network/basis-cli/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22



    Das Projekt MUSS eine Zwei-Faktor-Authentifizierung (2FA) für Entwickler haben, um ein zentrales Repository zu wechseln oder auf sensible Daten zugreifen zu können (z. B. private Schwachstellen-Berichte). Dieser 2FA-Mechanismus DARF Mechanismen ohne kryptographische Mechanismen wie SMS verwenden, obwohl dies nicht empfohlen wird. [require_2FA]

    Two-factor authentication is required for every member of the basis-network GitHub organisation, enforced by the organisation setting rather than by asking people nicely — a member without 2FA is removed from the organisation by GitHub, so it cannot quietly lapse. That covers both things the criterion names, because both go through the same account: write access to this repository, and the private security advisory queue where vulnerability reports arrive. It is publicly verifiable: https://api.github.com/orgs/basis-network reports "two_factor_requirement_enabled": true.



    Die Zwei-Faktor-Authentifizierung des Projekts (2FA) SOLLTE Kryptographie-Mechanismen verwenden, um Identitätswechsel zu verhindern. Short-Message-Service-/SMS-basierte 2FAs allein erfüllen dieses Kriterium nicht, da sie nicht verschlüsselt sind. [secure_2FA]
    Ein 2FA-Mechanismus, der dieses Kriterium erfüllt, wäre eine Time-Based-One-Time-Password-/TOTP-Anwendung, die automatisch einen Authentifizierungscode generiert, der sich nach einer gewissen Zeit ändert. Beachten Sie, dass GitHub TOTP unterstützt.

    The organisation requires 2FA but does not currently restrict which second factor a member may use, and GitHub still permits SMS as one option. Since the criterion asks specifically for cryptographic mechanisms, and it cannot be asserted from the outside which factor each maintainer has enrolled, the honest answer today is Unmet rather than a claim that happens to be probable. The fix is small and is on the list: both maintainers enrolling a security key or TOTP and dropping SMS, after which this becomes Met with no further work.


 Qualität 6/7

  • Programmierstil


    Das Projekt MUSS seine Code-Review-Anforderungen dokumentieren, einschließlich, wie Code-Überprüfung durchgeführt wird, was überprüft werden muss und was erforderlich ist, um akzeptabel zu sein. (URL erforderlich) [code_review_standards]
    Siehe auch two_person_review und contribution_requirements.

    CONTRIBUTING.md has a "How changes are reviewed" section stating how review is conducted and what must be checked, in order: is it correct and does the suite still pass; does it change behaviour without a test, which is a blocking comment; does it weaken a refusal, in which case it is read line by line against the assurance case and "looks fine" is explicitly not an acceptable review; do workflow changes keep least-privilege permissions and SHA-pinned actions; does every new file carry its SPDX header, decided by reuse lint rather than by opinion; and is the documentation still true afterwards. It also states the acceptance condition — all CI checks passing plus approval from a maintainer other than the author — and then states plainly that with one active maintainer this is not always possible today, rather than describing a process the project does not follow. https://github.com/basis-network/basis-cli/blob/main/CONTRIBUTING.md#how-changes-are-reviewed



    Das Projekt MUSS mindestens 50% aller vorgeschlagenen Änderungen vor dem Release durch eine andere Person als den Autor überprüfen, um festzustellen, ob es sich um eine sinnvolle Änderung handelt und frei von bekannten Problemen ist, die gegen die Freigabe der Änderung sprechen würden [two_person_review]

    The criterion asks that at least 50% of proposed modifications be reviewed before release by someone other than their author. Of the human pull requests merged here so far, none has an approving review by a second person: the author merged them once the required CI checks passed. The project does not hide this — GOVERNANCE.md states that with two people, requiring each to review the other would stall the project the first time either is away, so a second review happens when it can rather than being promised and skipped; CONTRIBUTING.md's review section says the same; and the assurance case names single-maintainer review as the project's dominant residual risk. It becomes Met when the second maintainer reviews and approves changes until more than half of proposed modifications carry an author-independent review, which is a change in practice rather than in configuration. https://github.com/basis-network/basis-cli/blob/main/docs/ASSURANCE-CASE.md


  • Produktivsystem


    Das Projekt MUSS ein reproducible Build haben. Wenn kein Building erforderlich ist (z. B. Skriptsprachen, in denen der Quellcode direkt verwendet wird, anstatt kompiliert zu werden), wählen Sie "nicht anwendbar" (N/A). (URL erforderlich) [build_reproducible]
    Eine reproduzierbares Build bedeutet, dass mehrere Parteien den Prozess der Generierung von Informationen aus Quelldateien unabhängig voneinander wiederholen und genau das gleiche Bit-für-Bit-Ergebnis erhalten können. In manchen Fällen kann dies dadurch gelöst werden, dass man eine Sortierreihenfolge erzwingt. JavaScript-Entwickler können erwägen npm shrinkwrap und webpack OccurenceOrderPlugin zu verwenden. GCC und clang Benutzer könnten die Option -frandom-seed nützlich finden. Die Buildumgebung (einschließlich des Toolsets) kann oft für externe Teilnehmer definiert werden, indem der kryptografische Hash eines bestimmten Containers oder einer virtuellen Maschine angegeben wird, die sie für das Kompilieren verwenden können. Das Reproducible Builds Projekt hat eine Dokumentation, wie dies erreicht werden kann.

    No building occurs. This is a scripting-language project: download.sh and the test suite are read by the interpreter as they are, and the Makefile has no build target — only check, coverage and lint. There is no generated artefact whose bit-for-bit reproduction could be compared. Reproducibility of the compiled basis binary is a property of basis-core, which is not public and is outside this entry's declared scope; the assurance case lists the Windows build's missing provenance as a known gap rather than claiming otherwise.


  • Automatisierte Test-Suite


    Eine Test-Suite MUSS in einer standardisierten Weise für diese Programmiersprache anrufbar sein. (URL erforderlich) [test_invocation]
    Zum Beispiel, "make check", "mvn test", oder "rake test" (Ruby).

    make check. Shell has no de facto standard test runner, so the Makefile provides the conventional entry point; test/run.sh also runs directly, and make lint is its counterpart for shellcheck and reuse. https://github.com/basis-network/basis-cli/blob/main/Makefile



    Das Projekt MUSS eine kontinuierliche Integration implementieren, bei der neue oder geänderte Codes häufig in ein zentrales Code-Repository integriert werden und automatisierte Tests auf dem Ergebnis durchgeführt werden. (URL erforderlich) [test_continuous_integration]
    In den meisten Fällen bedeutet dies, dass jeder Entwickler, der Vollzeit auf dem Projekt arbeitet, mindestens täglich integriert.

    .github/workflows/test.yml runs make check on every push to main and every pull request, alongside shellcheck, reuse lint, a checksum-format check and CodeQL. All five are required status checks on main, so nothing merges without them. https://github.com/basis-network/basis-cli/actions/workflows/test.yml



    Das Projekt MUSS automatisierte FLOSS-Test-Suite(n) einsetzen, die mindestens 90% der Befehle abdecken, wenn es mindestens ein FLOSS-Tool gibt, das dieses Kriterium in der ausgewählten Programmiersprache messen kann. [test_statement_coverage90]

    98.1% statement coverage of download.sh, 52 of 53 statements, measured with bashcov rather than estimated. make coverage produces the figure and CI runs it as its own job on every push and every pull request, failing below a hard floor of 90%. The single statement reported uncovered is the done that carries the download loop's redirection, which bash attributes to the while; every case that downloads anything executes it. It is left in the report rather than special-cased, because a coverage tool taught to lie about one line stops being evidence about the others.



    Das Projekt MUSS automatisierte FLOSS-Test-Suite(s) mit mindestens 80% Zweig-Abdeckung haben, wenn es mindestens ein FLOSS-Tool gibt, das dieses Kriterium in der ausgewählten Sprache messen kann. [test_branch_coverage80]

    There is no FLOSS tool that measures branch coverage for shell, which is the condition the criterion attaches. The two coverage tools that work on bash — bashcov and kcov — both measure statements only; bashcov's branch-coverage support comes from SimpleCov and applies to Ruby, not to the bash it traces. Statement coverage is measured and enforced instead, at 98.1% against a 90% floor. If a branch-coverage tool for shell appears, adding it is on the roadmap and would go into CI the same way.


 Sicherheit 4/5

  • Verwende grundlegend gute kryptographische Praktiken

    Beachten Sie, dass einige Software keine kryptographischen Mechanismen verwenden muss. Wenn Ihr Project Software erstellt das (1) kryptographische funktionen einbindet, aktiviert, oder ermöglicht und (2) aus den USA heraus an nicht US-Bürger verteilt wird, dann könnten sie rechtlich zu weiterne Schritten gezwungen sein. Meistens beinhaltet dies lediglich das Senden einer E-Mail. Für mehr Informationen, siehe den Abschnitt zu Encryption in Understanding Open Source Technology & US Export Controls.

    Die vom Projekt produzierte Software MUSS sichere Protokolle für alle Netzwerkkommunikationen unterstützen , wie SSHv2 oder höher, TLS1.2 oder höher (HTTPS), IPsec, SFTP und SNMPv3. Unsichere Protokolle wie FTP, HTTP, Telnet, SSLv3 oder früher, und SSHv1 MÜSSEN standardmäßig deaktiviert werden und nur aktiviert werden, wenn der/die Benutzer/in es speziell konfiguriert. Wenn die vom Projekt produzierte Software keine Netzwerkkommunikation verwendet, wählen Sie "nicht anwendbar" (N/A). [crypto_used_network]

    All network communication is HTTPS. download.sh fetches from https://github.com/<repo>/releases/download by default, and curl verifies the certificate chain by default with no flag anywhere in this project disabling it — there is no --insecure, no -k and no GIT_SSL_NO_VERIFY-style escape hatch. The base URL can be overridden by BASIS_CLI_BASE_URL, which exists so the test suite can point at a local directory over file:// without touching the network; that is an explicit action by the user, which is exactly the condition the criterion allows. Nothing insecure is enabled by default and no plaintext protocol is used at all.



    Die Projektsoftware MUSS, wenn sie TLS unterstützt oder verwendet, mindestens TLS Version 1.2 unterstützen. Beachten Sie, dass der Vorgänger von TLS SSL genannt wurde. Wenn die Software TLS nicht verwendet, wählen Sie "nicht anwendbar" (N/A). [crypto_tls12]

    TLS is used through the system's curl and its TLS library, so the project supports whatever they do, which on any currently supported platform is TLS 1.2 and 1.3. The script pins no version, disables nothing and offers no option to downgrade, so a system hardened to 1.2-or-better stays that way. GitHub, the only host contacted by default, requires TLS 1.2 as a minimum on its side.


  • Gesicherte Zustellung gegen Man-in-the-Middle-/MITM-Angriffe


    Die Projekt-Website, das Repository (wenn über das Internet zugänglich) und die heruntergelandenen Seiten (falls separat) MÜSSEN Key-Hardening-Headers mit nichtpermeablen Werten enthalten. (URL erforderlich) [hardened_site]
    Beachten Sie, dass GitHub und GitLab bekannt bekannterweise dies erfüllen. Websites wie https://securityheaders.io/ können dies schnell überprüfen. Die wichtigsten Key-Hardening-Header sind: Content Security Policy (CSP), HTTP Strict Transport Security (HSTS), X-Content-Type-Options (as "nosniff"), and X-Frame-Options. Komplett statische websiten die keine Möglichkeit für das anmelden auf der webseite erlauben können vermutlich mit geringer Gefahr einige Hardening-Headers weglassen; es gibt jedoch keine verlässliche Methode solche Seiten zu identifizieren und deshalb erfordern wir diese Headers auch auf voll statischen Webseiten.

    The project's website, repository and download site are all GitHub — the entry's homepage URL is the repository itself, and releases are served from the same host — and GitHub serves all four key hardening headers with non-permissive values. Verified directly rather than assumed: content-security-policy: default-src 'none'; base-uri 'self'; ..., strict-transport-security: max-age=31536000; includeSubdomains; preload, x-content-type-options: nosniff, and x-frame-options: deny. Anyone can reproduce that with curl -I https://github.com/basis-network/basis-cli.


  • Andere Sicherheitsissues


    Das Projekt MUSS innerhalb der letzten 5 Jahre eine Sicherheitsüberprüfung durchgeführt haben. Diese Überprüfung muss die Sicherheitsanforderungen und die Sicherheitsgrenze berücksichtigen. [security_review]
    Dies DARF durch die Projektmitglieder und/oder eine unabhängige Bewertung geschehen. Diese Bewertung kann durch statische und dynamische Analyse-Tools unterstützt werden, aber es muss auch eine menschliche Überprüfung sein, um Probleme zu identifizieren (insbesondere im Design), die Werkzeuge nicht erkennen können.

    A security review was performed on 2026-08-24 and is recorded in docs/ASSURANCE-CASE.md section 7, which states what it consisted of rather than just that it happened. It considered both things the criterion requires: the security requirements, which are stated in SECURITY.md as five guarantees and four explicit non-guarantees, and the security boundary, which is the four trust regions in the assurance case. The threat model was re-derived from the current code rather than inherited; all nine test cases were read against the claims they are cited for; coverage was measured rather than assumed; and every workflow was re-read for permission scope and action pinning. Tool support came from shellcheck, CodeQL over the workflows, OpenSSF Scorecard and the suite itself, but the two findings — single-maintainer review as the dominant residual risk, and the Windows build's missing provenance — came from human reading, which is what the criterion's details ask for. Both are written down as limits rather than resolved on paper. https://github.com/basis-network/basis-cli/blob/main/docs/ASSURANCE-CASE.md



    Härtungsmechanismen müssen in der Projektsoftware verwendet werden, so dass Softwarefehler weniger wahrscheinlich zu Sicherheitslücken führen. (URL erforderlich) [hardening]
    Härtungsmechanismen können HTTP-Header enthalten wie Content Security Policy (CSP), oder Compiler-Flags (z.B. -fstack-protector), um Angriffe zu mildern, oder Compiler-Flags, um undefiniertes Verhalten zu eliminieren. Für unsere Zwecke wird das Prinzip des kleinsten Privilegs nicht als Verhärtungsmechanismus betrachtet (trotzdem ist es wichtig, aber an anderer Stelle).

    The hardening available to a shell script is applied. set -euo pipefail is the first executable line: an unset variable, a failing command or a failing pipeline stage aborts rather than continuing with a wrong value — the failure mode that turns a shell defect into a security problem. Every expansion is quoted and shellcheck enforces it in CI as a required check. The script asks for no privilege and writes only under its own bin/ directory, touching no system location. On the CI side, which is the part of this project with credentials: permissions: read-all at workflow level with elevation per job only where genuinely needed, persist-credentials: false on every checkout, and every action pinned to a commit SHA rather than a mutable tag. The project sites are GitHub, which serves Content-Security-Policy, HSTS, X-Content-Type-Options and X-Frame-Options.

    Warnung: URL erforderlich, aber keine URL gefunden.


 Analyse 1/2

  • Dynamische Codeanalyse


    Das Projekt MUSS mindestens ein dynamisches Analyse-Tool auf jeden kommenden Hauptproduktionsrelease der Software, die durch das Projekt vor seiner Freigabe produziert wird, anwenden. [dynamic_analysis]
    Ein dynamisches Analyse-Tool untersucht die Software, indem es sie mit bestimmten Eingaben ausführt. Beispielsweise DARF das Projekt ein Fuzzing-Tool verwenden (z.B. American Fuzzy Lop) oder einen Web Application Scanner (z.B. OWASP ZAP oder w3af). In einigen Fällen ist das OSS-Fuzz Projekt bereit, Fuzz-Tests auf Ihr Projekt anzuwenden. Für die Zwecke dieses Kriteriums muss das dynamische Analyse-Tool die Eingaben in irgendeiner Weise variieren, um nach verschiedenen Arten von Problemen zu suchen oder eine automatisierte Test-Suite mit mindestens 80% Zweig-Abdeckung sein. Die Englische Wikipedia-Seite zur dynamischen Analysen und die OWASP Seite über Fuzzing nennen einige dynamische Analyse-Tools. Das Analyse-Tool(s) DARF für der Suche nach Sicherheitslücken eingesetzt werden, aber das ist nicht erforderlich.

    No fuzzer or scanner is run. The test suite does execute download.sh with varied inputs, two of them adversarial, but it does not generate inputs and we do not measure branch coverage, so claiming it as dynamic analysis would be a stretch. There is also little surface to point a tool at: download.sh runs on the user's machine, takes one argument and three environment variables, and there is no service here to scan.



    Das Projekt SOLLTE viele Laufzeit-Assertionen in der Projektsoftware enthalten und diese Assertionen während der dynamischen Analyse überprüfen. [dynamic_analysis_enable_assertions]
    Dieses Kriterium schlägt nicht vor, Assertions in der Produktionsumgebung zu aktivieren; das liegt ganz beim Projekt und seinen Benutzern. Stattdessen liegt der Fokus dieses Kriteriums darauf, die Fehlererkennung während der dynamischen Analyse vor der Bereitstellung zu verbessern. Das Aktivieren von Assertions im Produktionseinsatz unterscheidet sich völlig vom Aktivieren von Assertions während der dynamischen Analyse (wie z.B. Tests). In einigen Fällen ist das Aktivieren von Assertions im Produktionseinsatz äußerst unklug (insbesondere bei hochintegren Komponenten). Es gibt viele Argumente gegen das Aktivieren von Assertions in der Produktion, z.B. sollten Bibliotheken keine Aufrufer zum Absturz bringen, ihre Anwesenheit kann zur Ablehnung durch App Stores führen und/oder das Auslösen einer Assertion in der Produktion kann private Daten wie private Schlüssel offenlegen. Beachten Sie, dass in vielen Linux-Distributionen NDEBUG nicht definiert ist, sodass C/C++ assert() standardmäßig für die Produktion in diesen Umgebungen aktiviert wird. Es kann wichtig sein, einen anderen Assertion-Mechanismus zu verwenden oder NDEBUG für die Produktion in diesen Umgebungen zu definieren.

    bash has no assertion mechanism to enable. Both scripts run under set -u, and the script under test under set -euo pipefail, which is the nearest equivalent the language offers, but calling that "many assertions" would be generous.



Sie können Tools und KI-Systeme nutzen, um Änderungen über eine einfache URL vorzuschlagen, z. B. https://www.bestpractices.dev/de/projects/14224/choose/edit?osps_ac_01_01_status=Met&osps_ac_01_01_justification=GitHub+enforced. Wie das geht, erfahren Sie in unserem Automatisierungsvorschlagssystem. 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 Sebastian und die OpenSSF Best Practices Badge-Mitwirkenden als Urheber.

Projekt-Badge-Eintrag im Besitz von: Sebastian.
Eintrag erstellt: 2026-08-24 15:57:55 UTC, zuletzt aktualisiert: 2026-08-26 02:10:48 UTC. Letztes erreichtes Badge: 2026-08-24 16:56:42 UTC.