Previeni l'esposizione di segreti e sourcemap nei bundle frontend
One-time pack self-hosted: policy→config + PR Gate + report firmato
Per chi è
- Team che buildano applicazioni Next.js, Vite, o altri bundler moderni
- Progetti che pubblicano sourcemap in produzione (volontariamente o per errore)
- Team che usano variabili d'ambiente NEXT_PUBLIC_* e vogliono garantire che solo quelle autorizzate siano esposte
- Organizzazioni che richiedono evidenze firmate per audit di sicurezza
Cosa previene
- Segreti nei bundle pubblici: API keys, token, credenziali hardcoded o esposte tramite env var che finiscono nei file JavaScript pubblici.
- Sourcemap pubbliche: File .map accessibili pubblicamente che rivelano codice sorgente, commenti, e potenziali segreti.
- NEXT_PUBLIC non autorizzati: Variabili d'ambiente server-only esposte accidentalmente al client tramite NEXT_PUBLIC_*.
Cosa include
- Scanner deterministico — Regex + euristiche per trovare segreti nei bundle built (JS/CSS) e sourcemap
- Sourcemap guard — Regole/config per Vercel/Netlify/Cloudflare + Next/Vite per non pubblicare *.map (o restringere)
- NEXT_PUBLIC lint — Rileva env var server-only esposte al client tramite diff con allowlist
- GitHub Action PR Gate — Blocca PR se trova segreti, sourcemap pubbliche non permesse, o NEXT_PUBLIC non in allowlist
- Report HTML firmato — SHA-256 + PR template con evidenze
Compatibilità
Integrazioni:
GitHub Actions
Vercel
Netlify
Cloudflare
Node
Bundler: Next.js, Vite, Webpack, esbuild, Rollup
Piattaforme: Vercel, Netlify, Cloudflare Pages
CI/CD: GitHub Actions (altre in verifica)
Installazione in 10 minuti
bash
# 1. Installa il pack
npm install --save-dev @merlonsec/leaklock
# 2. Crea policy.yml nella root del progetto
cat > policy.yml << EOF
leaklock:
sourcemap:
allow_public: false
platforms:
- vercel
- netlify
secrets:
patterns:
- type: api_key
regex: '(?i)(api[_-]?key|apikey)\s*[:=]\s*["']?([a-z0-9]{32,})["']?'
- type: token
regex: '(?i)(token|bearer)\s*[:=]\s*["']?([a-z0-9]{40,})["']?'
next_public:
allowlist:
- NEXT_PUBLIC_APP_URL
- NEXT_PUBLIC_ANALYTICS_ID
EOF
# 3. Aggiungi GitHub Action
mkdir -p .github/workflows
cat > .github/workflows/leaklock.yml << EOF
name: LeakLock Check
on: [pull_request]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: merlonsec/leaklock-action@v1
with:
policy: ./policy.yml
EOF Security model / Non-obiettivi
Scope: LeakLock verifica solo i bundle built e sourcemap. Non scannerizza il codice sorgente prima del build (usa GitGuardian o TruffleHog per quello).
Non è:
- Un scanner di codice sorgente completo (solo bundle + sourcemap)
- Un servizio hosted (tutto locale, nessun dato inviato)
- Un WAF o protezione runtime (solo prevenzione in CI/CD)
- Una garanzia al 100% (pattern regex possono avere falsi positivi/negativi)
È:
- Deterministico: stessi input = stessi risultati
- Verificabile: report firmati SHA-256
- Trasparente: policy YAML leggibile, nessuna black box
Esempio
Vedi un esempio completo con PR gate fallita e report HTML.
Oppure scarica un report di esempio.