
Lokaler Git-Pre-Push-Hook und Dateisystem-Scanner, der wahrscheinliche Secret-Leaks erkennt, übereinstimmende Werte redigiert und Pushes ohne Telemetrie oder Netzwerkzugriff blockiert.
Push Guard ist ein lokaler Git-pre-push-Schutz gegen wahrscheinliche Secret-Leaks.
Er scannt den Inhalt, der gepusht wird, meldet wahrscheinliche Secret-Muster, redigiert alle übereinstimmenden Werte und beendet sich mit einem von null verschiedenen Exit-Code, sodass Git den Push blockiert.
Entwickelt und gepflegt von Dragon Lady - github.com/Dragon-Lady - X: @answerislove2
Version 0.4.3 entfernt die Inline-Ausnahme # push-guard: ignore. Ein Upgrade kann Pushes und Pakete blockieren, die zuvor durchgelaufen sind. Vor dem Upgrade gemeinsam genutzter Hooks oder CI-Installationen sollte jedes konsumierende Repository geprüft werden:
git grep -n -i 'push-guard:[[:space:]]*ignore'
Prüfe jeden Treffer. Entferne Secrets und private Materialien; keines von beiden kann ausgenommen werden.
Für legitime Workflow-/IOC-Fixtures füge nur den geprüften, exakten Repository-
Pfad und die exakten workflow.*-Regel-IDs zu .push-guard-allow hinzu. Inline-Marker sind
jetzt gewöhnlicher Text, einschließlich derer in Tests oder Dokumentation. Konvertiere
nicht automatisch alle Markerzeilen in Ausnahmen. Prüfe jede neue Ausnahme als
sicherheitsrelevante Änderung.
Der Pre-Push-Hook liest Ausnahmen aus dem vom Ziel beworbenen Basis- Commit, niemals aus der Arbeitskopie oder Kandidaten-Commits. Eine neue oder erweiterte Ausnahme muss separat geprüft und festgelegt werden, bevor sie einen späteren Push ausnehmen kann. Bei einem Multi-Ref-Push gelten nur Ausnahmen, die von allen Ziel- Basen geteilt werden. Neue Refs ohne beworbene Basis erhalten keine Ausnahmen.
scan liest die Richtlinie ebenfalls aus --base. Wenn du einen größeren historischen
Bereich gegen einen separat geprüften Richtlinien-Snapshot auditierst, übergib explizit
--allow-list-ref <reviewed-40-character-commit-SHA>. Dies ist eine explizite Vertrauens-
entscheidung des Aufrufers; ersetze niemals die Richtlinie des ungeprüften Kandidaten.
scan-package verwendet weiterhin die vom Aufrufer gewählte --repo-Richtlinie, außerhalb
des Artefakts. Gib ein geprüftes Richtlinienverzeichnis an, wenn du nicht vertrauenswürdige Builds scannst.
Führe push-guard scan --base <trusted-base> --head HEAD und
push-guard scan-package dist/* der neuen Version gegen die tatsächlichen ausgehenden Änderungen und gebauten
Artefakte aus, bevor du den installierten Hook aktualisierst. Archiv-Member-Pfade können von
Quellpfaden abweichen; prüfe diese exakten Pfade separat. Behalte die bestehende
installierte Version bei, bis die betroffenen Repositories diese Migration abgeschlossen haben.
Öffentliche Landingpage: push-guard.netlify.app
Die statische Projekt-Landingpage liegt in docs/ und hat keine Laufzeit-
abhängigkeiten, externen Skripte, Analysen oder Remote-Assets. Sie kann
mit GitHub Pages aus dem docs/-Verzeichnis bereitgestellt oder mit der
enthaltenen netlify.toml auf Netlify deployt werden (kein Build-Befehl; Publish-Verzeichnis docs).
Das aktuelle Netlify-Projekt verwendet manuelle Deploys. Ein Git-Push allein aktualisiert
die öffentliche Seite nicht: Veröffentliche die Inhalte von docs/ nach jedem Release und
prüfe die Live-Version, das Social-Image und die Response-Header. Die Datei docs/_headers
behält die Sicherheits-Header bei, wenn du dieses Verzeichnis direkt deployst.
--send-Option aktiviert aggregierte
Alarme an konfigurierte Ziele; der Git-Guard bleibt offline.git-Subprozess nur zum Lesen von Commit-Diffs, gepushten Trees,
konfigurierten Hook-Pfaden und Ignore-Metadaten. Der bestehende Hook-Einstiegspunkt bleibt
erhalten, mit gehärteter Inspektion von Rohinhalten und ausgehender Historie.$HOME, und führt keine Kind-
prozesse aus, einschließlich Git.$XDG_STATE_HOME/push-guard-sweep/fp.key (Standard
~/.local/state/push-guard-sweep/fp.key) für stabile, nicht erratbare Fingerabdrücke.
Dieser Schlüssel ist die ausdrückliche Ausnahme von „standardmäßig keine Daten gespeichert“. Er enthält
keine gescannten Daten. Das State-Verzeichnis hat 0700 und Dateien werden mit 0600 erstellt.--baseline und --output enthalten redigierte lokale Metadaten;
--send speichert schlüsselbasierte Deduplizierungsbelege, niemals Alarm-Anmeldedaten oder Secrets.Das Blockieren eines Pushs ist Git's Antwort auf den Hinweis. Push Guard bleibt schreibgeschützt
und verändert keine Dateien. Ein Override ist mit git push --no-verify verfügbar,
wenn bekannt ist, dass der übereinstimmende Wert kein Secret ist.
Der Befehl push-guard sweep und der Alias push-guard-sweep bieten dieselbe lokale
Inspektion. Sie erfordern das vorhandene Python 3.11 oder neuer des Pakets und haben keine
zusätzlichen Laufzeitabhängigkeiten. Entwicklungstests verwenden das optionale test-Extra
(python -m pip install ".[test]", dann PYTHONPATH=src python -m pytest -q
vom Repository-Stamm aus). Die Version 0.4.0 fügt Sweep hinzu. CI installiert dieses
Entwicklungs-Extra und führt die gesamte pytest-Suite aus, einschließlich der Legacy-
unittest-Fälle. Release-Tests laufen in einem
separaten Job; dieser Job stellt dem Publishing niemals Distributionsartefakte bereit. Der
Artifact-Build-Job installiert keine Testabhängigkeiten. Sweep installiert
oder aktiviert keinen Scheduler.
push-guard sweep --list-targets
push-guard sweep --roots ~/projects --class stray
push-guard-sweep --format json --output ~/sweep-report.json
push-guard-sweep --baseline ~/sweep-baseline.json
push-guard-sweep report --format html --output ~/sweep-report.html
push-guard-sweep print-timer --interval 7d
Jeder Scan berücksichtigt außerdem die unten aufgeführten Standardpfade für Verlauf, Dotfiles, Konfiguration und Logs. --roots ändert die Suchwurzeln für .env* und benutzerdefinierte Includes; verwenden Sie --exclude, um die anderen Standardsätze einzugrenzen. Wiederholtes --include GLOB fügt Dateien innerhalb der bestehenden begrenzten Suchen hinzu, und wiederholtes --exclude GLOB entfernt Pfade. Globs stimmen mit Basisnamen, HOME-relativen Pfaden oder absoluten Pfaden überein. Excludes haben Vorrang; Includes können Sicherheitsausschlüsse oder Tiefenbegrenzungen nicht außer Kraft setzen. ~ in CLI-Pfadargumenten wird expandiert. Gescannte Pfade müssen innerhalb von $HOME bleiben.