Von Gast (nicht überprüft) , 29 April 2026

Die Kardinalregel

Alles in Git committet ist permanent bis zur aktiven Umschreibung.

Schicht 1: niemals Geheimnisse committen

# .env.example
DATABASE_URL=postgres://localhost/myapp
JWT_SECRET=replace-me

# .gitignore
.env
.env.local
.env.*.local
*.pem
*.key
secrets/

Schicht 2: Pre-Commit-Erkennung

brew install gitleaks
repos:
  - repo: https://github.com/gitleaks/gitleaks
    rev: v8.18.0
    hooks:
      - id: gitleaks
gitleaks detect --redact --source=.

Schicht 3: server-seitige Ablehnung

Ein pre-receive-Hook auf dem Server kann Pushes mit Geheimnissen ablehnen.

Schicht 4: CI-Scan

- uses: gitleaks/gitleaks-action@v2
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Schicht 5: verschlusselte Geheimnisse in Git

sops -e -i secrets.yaml
sops secrets.yaml
git add secrets.yaml
git commit -m "Update encrypted secrets"

Wenn ein Geheimnis durchsickert

  1. Sofort rotieren.
  2. Nutzungslogs auditieren.
  3. Historie umschreiben.
  4. Force-Push.
  5. Benachrichtigen.
# patterns.txt
AKIAIOSFODNN7EXAMPLE==>REDACTED
sk_live_abc123==>REDACTED

Wiederherstellung auf dem Host

Selbst nach Force-Push behalt GitHub "dangling" Commits zugreifbar fur SHA fur einige Zeit.