Da Anonimo (non verificato) , 29 Aprile 2026

La regola cardinale

Qualsiasi cosa committata in Git e permanente fino a riscrittura attiva della storia.

Livello 1: mai committare segreti

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

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

Livello 2: rilevamento pre-commit

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

Livello 3: rifiuto lato server

Un hook pre-receive sul server puo rifiutare push contenenti segreti.

Livello 4: scansione CI

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

Livello 5: segreti criptati in Git

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

Se un segreto trapela

  1. Ruotare immediatamente.
  2. Auditare i log di utilizzo.
  3. Riscrivere la storia.
  4. Force-push.
  5. Notificare.
# patterns.txt
AKIAIOSFODNN7EXAMPLE==>REDACTED
sk_live_abc123==>REDACTED

Recupero sull'host

Anche dopo force-push, GitHub mantiene commit "dangling" accessibili per SHA per qualche tempo.