API-Keys gehören nicht ins Repository
nosecrets prüft staged Dateien vor dem Commit auf Secrets, Tokens und auffällige High-Entropy-Strings. Lokal, ohne Account, ohne Cloud-Dienst.
nosecrets scan --staged prüft den exakten staged Inhalt – nicht das Arbeitsverzeichnis.
Keine API-Aufrufe. Regeln und Entropie-Prüfung laufen lokal und in der eigenen CI.
Kritische, hohe und mittlere Funde beenden mit 1 und stoppen den Commit. Sonst 0.
Ein Werkzeug für genau einen Moment: kurz vor dem Commit.
nosecrets ist kein allgemeiner Security-Scanner. Es durchsucht keine Git-History und schickt nichts an einen Dienst. Es prüft die Dateien, die gleich committet werden – dort, wo versehentliche Leaks meistens entstehen.
Dokumentation →- 01Staged statt History — geprüft wird der Inhalt des nächsten Commits
- 02Regeln plus Entropie — 50 Signaturen, dazu Shannon-Entropie für unbekannte Tokens
- 03Einmal alles —
scan --trackedprüft beim Einstieg den kompletten Git-Index - 04Lokal und in CI — derselbe Befehl, ohne Account und ohne SaaS
Datei, Zeile, Regel, Fingerprint.
$ git add config.ts
$ nosecrets scan --staged
config.ts:3:15 [CRITICAL] Stripe Secret Key (stripe-secret-key) nsi_98d332abab93
preview: sk_l...TxQ9
$ echo $?
1$ nosecrets scan --staged --format json
[
{
"path": "config.ts",
"line": 3,
"column": 15,
"rule_id": "stripe-secret-key",
"rule_name": "Stripe Secret Key",
"severity": "critical",
"fingerprint": "nsi_98d332abab93",
"preview": "sk_l...TxQ9"
}
]50 Regeln in sieben Dateien, dazu eine Entropie-Stufe.
Cloud
AWS, Google Cloud, Azure, DigitalOcean und Cloudflare – acht Regeln in cloud.toml.
Deployment
Netlify, Fly.io, Heroku, Vercel, Railway, Render und Supabase – neun Regeln in deploy.toml.
Code und Chat
GitHub, GitLab, npm, PyPI, Slack und Discord, inklusive Webhook-URLs – elf Regeln in code.toml.
Datenbanken und Mail
Connection-URIs für Postgres, MySQL, MongoDB, Redis und SQL Server, JDBC-Passwörter; SendGrid, Twilio, Mailchimp, Mailgun.
Zahlung und Generisch
Stripe, PayPal und Square; dazu PEM-Private-Keys, Passwort-Zuweisungen und Basic-Auth-Header.
Hohe Entropie
Unbekannte Tokens ab 20 Zeichen, standardmäßig nur nahe Namen wie secret, token oder password. Schweregrad: medium.
Vier Crates, ein Durchlauf.
- nosecrets-rules
Regeln laden
Liest die eingebauten TOML-Regeln und optional eigene Dateien per
--rules. - nosecrets-core
Scannen
Vorfilter über Schlüsselwörter (Aho-Corasick), dann Regex, Validierung und Entropie.
- nosecrets-filter
Filtern
Wendet Pfad-Ignores, Allowlists, Fingerprints und Inline-Kommentare an.
- nosecrets-report
Ausgeben
Text oder JSON, dazu der Exit-Code für Hook und CI.
Installieren, einmal alles prüfen, dann jeden Commit.
- 1Installieren
Binary holen
Per npm, Cargo (
cargo install nosecrets-cli) oder curl-Skript für Apple-Silicon-macOS und Linux.npm install -g @casoon/nosecrets - 2Bestand
Einmal alles prüfen
Scannt alle Git-getrackten Dateien aus dem Index – ohne ungetrackte Dateien.
nosecrets scan --tracked - 3Hook
Jeden Commit prüfen
Ab dann nur die Dateien des nächsten Commits, mit ihrem exakten staged Inhalt.
nosecrets scan --staged
Eine TOML-Datei, eine Ignore-Liste, ein Hook.
[ignore]
paths = ["vendor/", "node_modules/", "*.lock"]
[allow]
patterns = ["EXAMPLE", "changeme", "YOUR_.*_HERE"]
values = ["AKIAIOSFODNN7EXAMPLE"]
[entropy]
enabled = true
min_length = 20
threshold = 4.2
require_context = true# .nosecretsignore
# nsi_<hash> oder nsi_<hash>:<pfad-glob>
nsi_98d332abab93
nsi_b2c3d4e5f6a7:src/config.py
# inline im Code
api_key = "sk_test_xxx" # @nosecrets-ignorerepos:
- repo: local
hooks:
- id: nosecrets
name: nosecrets
entry: nosecrets scan --staged
language: system
pass_filenames: falseWas nosecrets nicht leistet.
Ein Pre-commit-Scanner senkt das Risiko eines Leaks. Er schließt es nicht aus.
Keine History-Suche
Secrets in älteren Commits findet nosecrets nicht. scan --tracked prüft nur den aktuellen Index.
Regeln decken nicht alles ab
50 Regeln für bekannte Formate. Andere Tokens meldet nur die Entropie-Prüfung – standardmäßig nur mit passendem Variablennamen.
Fehlalarme sind möglich
Vor allem bei der Entropie-Prüfung. Einzelne Funde lassen sich per Fingerprint oder Inline-Kommentar unterdrücken.
Hooks lassen sich umgehen
git commit --no-verify überspringt den Hook. Wer das absichern will, lässt denselben Scan zusätzlich in der CI laufen.
Kein Ersatz für Rotation
Ist ein Secret schon gepusht, hilft kein Hook mehr: Schlüssel beim Anbieter widerrufen und neu ausstellen.
Häufige Fragen.
Verlässt ein Secret meine Maschine?
Nein. nosecrets ruft keinen externen Dienst auf. Der Scan läuft lokal oder in der eigenen CI, und die Ausgabe zeigt nur eine gekürzte Vorschau des Treffers.
Was passiert, wenn der Pre-commit-Hook etwas findet?
nosecrets beendet sich mit Exit-Code 1, der Commit wird abgebrochen. Die Ausgabe nennt Datei, Zeile, Spalte, Regel und Fingerprint. Blockierend sind Funde mit Schweregrad critical, high oder medium; ohne solche Funde ist der Exit-Code 0.
Wie gehe ich mit Fehlalarmen um?
Über Pfad-Ignores und Allowlists in .nosecrets.toml, über den Fingerprint in .nosecretsignore oder mit dem Inline-Kommentar @nosecrets-ignore. Mit --interactive fragt nosecrets bei jedem Fund, ob er ignoriert werden soll.
Wie führe ich nosecrets in ein bestehendes Repository ein?
Einmal nosecrets scan --tracked ausführen. Das prüft alle Git-getrackten Dateien aus dem Index, ohne ungetrackte Dateien. Danach übernimmt nosecrets scan --staged im Pre-commit-Hook.
Kann ich eigene Regeln ergänzen?
Ja. Mit --rules lädt nosecrets zusätzliche Regeln aus einer TOML-Datei; die Option lässt sich wiederholen. Das Format ist in RULES_SPEC.md im Repository beschrieben.
Funktioniert nosecrets auch in der CI?
Ja. Derselbe Befehl läuft als CI-Schritt, zum Beispiel nosecrets scan --tracked. Mit --format json entsteht maschinenlesbare Ausgabe, der Exit-Code lässt den Build bei blockierenden Funden fehlschlagen.
Ein Befehl vor jedem Commit.
Offline und ohne Account – nosecrets prüft staged Dateien, bevor sie im Repository landen.