
Schützt vor Lieferketten-, Slopsquatting- und Typosquatting-Angriffen von Abhängigkeiten und Code.
cargo install sloppy-joe
Kompromittierte Releases können einen legitimen Paketnamen verwenden. Der LiteLLM-Maintainer-Bericht identifiziert die bösartigen Versionen 1.82.7 und 1.82.8 im März 2026. Die standardmäßige 72-Stunden-Sperre von sloppy-joe für das Veröffentlichungsalter kann neu veröffentlichte Versionen ablehnen, wenn du den aufgelösten Abhängigkeitsgraphen mit
--cioder--fullvor der Installation scannst. Dies ist eine Zeitrichtlinie, keine Inspektion der bösartigen Nutzlast.
Forschungsarbeiten dokumentieren Paket-Halluzinationen in generiertem Code. sloppy-joe prüft Abhängigkeitsnamen und Metadaten vor der Installation; allein die Existenz kann nicht belegen, dass ein registriertes Paket sicher ist.
Paketnamen sind auf 214 Bytes für npm und 1.024 Bytes für andere Ökosysteme begrenzt, um den Aufwand für die Typo-Analyse zu begrenzen. Längere Namen melden Scan not supported (Exit 2).
# Install (single static binary, no runtime dependencies)
cargo install sloppy-joe
# Or download a prebuilt binary archive from GitHub Releases
# https://github.com/brennhill/sloppy-joe/releases
# Fast local guardrail — auto-detects ecosystem from manifest files
sloppy-joe check
# Strict online scan (recommended before push / release)
sloppy-joe check --full
# Strict CI-oriented scan
sloppy-joe check --ci
# Check a specific directory
sloppy-joe check --dir ./my-project
# Check only npm dependencies
sloppy-joe check --type npm
# Check the Python runtime plus selected groups/extras
sloppy-joe check --python-groups dev,test --python-version 3.12
sloppy-joe check --python-extras docs --python-platform linux --python-version 3.12
# Enforce canonical rules and org standards via config
sloppy-joe check --config /etc/sloppy-joe/config.json
# Config from a URL (useful in CI — no secrets to manage)
sloppy-joe check --config https://raw.githubusercontent.com/yourorg/security-configs/main/sloppy-joe.json
# JSON output for CI pipelines
sloppy-joe check --json
# Review exact maintainer-change exceptions with evidence
sloppy-joe check --review-exceptions
# Create and register a safe per-repo config outside the repo
sloppy-joe init --register
# Create an ecosystem-specific greenfield starter policy
sloppy-joe init --greenfield --ecosystem npm
# Print review-only bootstrap suggestions for an npm or Cargo repo
sloppy-joe init --from-current
# Or write/register those suggestions safely outside the repo
sloppy-joe init --from-current --register
# Or write a config manually to a secure path outside the repo
sloppy-joe init > /secure/location/sloppy-joe.json
nix profile install github:brennhill/sloppy-joe
Der Flake auf main pinnt die veröffentlichte Binärversion und ihre Prüfsummen.
Scan-Modi:
sloppy-joe check führt die schnelle lokale Schutzprüfung aus. Es erzwingt stets Manifest-Parsing, Lockfile/Sync, Provenienz und die Richtlinie für nicht unterstützte Quellen. Wenn sich der Abhängigkeits- oder Richtlinienstatus geändert hat oder der letzte erfolgreiche vollständige Scan älter als 24 Stunden ist, empfiehlt es sloppy-joe check --full.sloppy-joe check --full führt den strikten Online-Scan aus und aktualisiert den aufgezeichneten Status des erfolgreichen vollständigen Scans.sloppy-joe check --ci führt dieselbe strikte Abdeckung wie --full aus, mit CI-orientierter Ausrichtung.sloppy-joe check standardmäßig das Profil runtime aus. Wenn bereichsbezogene Abhängigkeiten vorhanden sind, warnt es und empfiehlt, explizite Flags --python-groups, --python-extras, --python-platform und/oder --python-version für CI-/Build-Parität anzugeben.sloppy-joe check erinnert stets daran, --ci oder --full für CI- und Produktions-Gating zu verwenden.Exit-Codes: 0 = keine blockierenden Probleme im ausgewählten Modus gefunden, 1 = blockierende Befunde, 2 = nicht unterstützte Scan-Eingabe oder Laufzeitfehler. Nicht unterstützte Syntax/Konfiguration ist kein Malware-Befund.
Unterstützt: JavaScript (npm, pnpm, Yarn, Bun), Python, Rust, Go, Ruby, PHP, JVM (Gradle/Maven) und .NET — automatisch aus Manifest-Dateien erkannt.
Ökosystem-Leitfäden: siehe docs/ecosystems/README.md für das aktuelle Vertrauensmodell, die unterstützten Funktionen und die Fail-Closed-Grenzen für jedes Ökosystem.
| Ökosystem | Erforderliches Manifest | Vertrauenswürdige Lockfile / Projektstatus |
|---|---|---|
| JavaScript / npm | package.json | package-lock.json oder npm-shrinkwrap.json; Legacy npm v1 standardmäßig blockiert |
| JavaScript / pnpm | package.json | pnpm-lock.yaml |
| JavaScript / Yarn | package.json | yarn.lock |
| JavaScript / Bun | package.json | bun.lock |
| Python | pyproject.toml, requirements*.txt, Pipfile, setup.cfg oder setup.py | vertrauenswürdiger Poetry-Pfad verwendet poetry.lock, vertrauenswürdiger uv-Pfad verwendet uv.lock, und vollständig hash-gelocktes pip-tools ist nur vertrauenswürdig, wenn der committete Requirements-Graph --index-url und alle --extra-index-url-Werte exakt bindet; im Repo sichtbare Python-Indizes können über trusted_indexes.pypi auf die Allowlist gesetzt werden; vertrauenswürdige Python-Modi werten jeweils ein ausgewähltes Installationsprofil aus (runtime standardmäßig, explizite Gruppen/Extras/Plattform/Architektur/Version über CLI); Legacy-Manifeste standardmäßig mit Warnungen erlaubt |
| Rust | Cargo.toml | Cargo.lock |
| Go | go.mod | go.sum erforderlich für externe Abhängigkeiten |
| Ruby | Gemfile | Gemfile.lock |
| PHP / Composer | composer.json | composer.lock |
| JVM / Gradle | build.gradle oder build.gradle.kts | gradle.lockfile |
| JVM / Maven | pom.xml | nur Warnung: noch kein vertrauenswürdiger projektlokaler Lockfile-Pfad |
| .NET / NuGet | .csproj | packages.lock.json |
Scan-Umfang: rekursive Scans ignorieren standardmäßig .planning. Konfiguriere "ignore_dirs": [".planning", "experiments"] in der externen Richtlinie, um andere Verzeichnisnamen auszuschließen, oder verwende "ignore_dirs": [], um konfigurierbare Ausschlüsse zu deaktivieren. Siehe Verzeichnisausschlüsse.