Proteggi staging e preview da indicizzazione e accesso non autorizzato

One-time pack self-hosted: noindex guard + preview gate + canonical guard + PR Gate + report firmato

Per chi è

  • Team che usano preview deployments (Vercel, Netlify, Cloudflare Pages)
  • Progetti con staging accessibili pubblicamente
  • Organizzazioni che vogliono prevenire indicizzazione di contenuti non finali
  • Team che necessitano di link condivisibili temporanei per preview

Cosa previene

  1. Indicizzazione di staging: Google e altri motori di ricerca che indicizzano preview/staging non finali.
  2. Accesso non autorizzato: Preview deployments accessibili pubblicamente senza protezione.
  3. Canonical errati: Link canonical che puntano a staging invece che produzione.
  4. Duplicati SEO: Contenuti duplicati tra staging e produzione che penalizzano SEO.

Cosa include

  • robots.txt + X-Robots-Tag — noindex,nofollow per staging/preview + meta robots patcher
  • Preview Gate — Edge middleware che richiede token (header o query), link condivisibili con scadenza
  • Canonical Guard — Forza canonical a produzione su staging/preview
  • Header/config generator — Per Vercel, Netlify, Cloudflare
  • GitHub Action PR Gate — Verifica che staging/preview non siano indicizzabili
  • Report HTML firmato — SHA-256 + PR template

Compatibilità

Integrazioni:

🔧 GitHub Actions
Vercel
Netlify
☁️ Cloudflare

Piattaforme: Vercel, Netlify, Cloudflare Pages
Metodi: robots.txt, X-Robots-Tag, meta robots, Preview Gate middleware
CI/CD: GitHub Actions

Installazione in 10 minuti

bash
# 1. Installa il pack
npm install --save-dev @merlonsec/stageshield

# 2. Crea policy.yml
cat > policy.yml << EOF
stageshield:
  environments:
    staging:
      noindex: true
      preview_gate: true
      canonical_guard: true
      token_env: STAGING_PREVIEW_TOKEN
    preview:
      noindex: true
      preview_gate: true
      canonical_guard: true
      token_env: PREVIEW_TOKEN
      token_expiry: 7d
  production:
    noindex: false
    preview_gate: false
EOF

# 3. Aggiungi middleware (esempio Vercel)
# middleware.ts
import { stageShield } from '@merlonsec/stageshield/vercel';

export default stageShield({
  token: process.env.PREVIEW_TOKEN,
  environments: ['preview', 'staging']
});

# 4. Aggiungi GitHub Action
mkdir -p .github/workflows
cat > .github/workflows/stageshield.yml << EOF
name: StageShield Check
on: [pull_request]
jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: merlonsec/stageshield-action@v1
        with:
          policy: ./policy.yml
EOF

Security model / Non-obiettivi

Scope: StageShield previene solo indicizzazione e accesso non autorizzato a preview/staging. Non è un sistema di autenticazione completo o un WAF.

Non è:

  • Un sistema di autenticazione utente completo (solo token-based preview gate)
  • Un WAF o protezione DDoS
  • Una garanzia SEO al 100% (i motori di ricerca possono comunque trovare link, ma rispettano noindex)
  • Un servizio hosted (tutto locale)

È:

  • Deterministico: stessa configurazione = stesso comportamento
  • Standard-compliant: robots.txt, X-Robots-Tag, canonical tags
  • Verificabile: report firmati SHA-256

Esempio

Vedi un esempio completo con preview gate configurato e test.

Oppure scarica un report di esempio.