Commit Graph

4 Commits

Author SHA1 Message Date
simone e2bd1d95ed fix(security): audit completo — secondo gate admin, hardening slug, XSS, CSP/HSTS, update CVE
Audit di sicurezza su tutta l'app. Report in .planning/SECURITY-SCAN.md (codice),
.planning/SECURITY-AUDIT-INFRA.md (dipendenze/segreti/deploy) e piano in
.planning/SECURITY-REMEDIATION-PLAN.md.

CRITICO — l'autorizzazione admin era un unico punto di rottura: nessuna delle 21
pagine /admin controllava la sessione e admin/layout.tsx renderizzava comunque i
figli quando mancava. L'unico guard era proxy.ts, su un Next.js affetto da
GHSA-6gpp-xcg3-4w24 (proxy bypass). Ora il layout è un secondo gate indipendente;
proxy.ts marca il path con un token derivato da NEXTAUTH_SECRET, così il gate non
è aggirabile forgiando header e fallisce chiuso se il proxy non gira.

ALTO — gli slug cliente avevano 4 caratteri casuali da Math.random() (~20 bit,
1.7M tentativi) e risolvono prima del token: ora 12 caratteri via nanoid
(CSPRNG, ~62 bit). Aggiunto rate limit al ramo /client/, che ne era privo.

ALTO — src/lib/quote-actions.ts esponeva due server action pubbliche senza
autenticazione, una delle quali scriveva su DB. Codice morto, zero chiamanti:
rimosso.

MEDIO — i quattro dangerouslySetInnerHTML nelle sezioni proposta rendevano output
AI come HTML grezzo su pagina pubblica, alimentato da transcript di terzi. Sostituiti
con RichText (whitelist di emphasis, nessun HTML al DOM). I transcript ora sono
recintati in tag che il system prompt dichiara essere dati, non istruzioni.

Inoltre: next 16.2.6 -> 16.2.12 e next-auth 4.24.14 -> 4.24.15 (chiude 9 CVE Next
piu GHSA-xmf8-cvqr-rfgj su getToken, raggiungibile dal proxy); HSTS e CSP;
potatura della Map di rate-limit.ts, che cresceva senza limite; espunta la password
Postgres di produzione dai due 07-01-SUMMARY.md.

Verificato: tsc pulito, build OK, smoke test su login/redirect/header forgiati.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-27 23:35:46 +02:00
simone 02d51179b3 docs(07-unified-service-catalog): complete phase 7 plan 2 execution summary
Phase 7 Plan 2 (Unified Service Catalog - Admin CRUD + Quote Builder) execution complete:
- Task 1: Query layer refactored to read from services table (3 queries updated)
- Task 2: Admin catalog CRUD + UI components rewired to services table with category field
- Task 3: Validation script enhanced with net-new services check

All must-haves satisfied:
- /admin/catalog list/add/edit/soft-delete fully functional on services table
- New services created post-migration have migrated_from=null
- Quote builder service picker reads from services via activeServices
- Historical quote_items.service_id FK to service_catalog remains untouched

Build status: TypeScript OK, npm run build passes
ROADMAP success criteria 3-4 satisfied for CAT-U-02 (admin catalog unification)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-11 06:27:38 +02:00
simone 02dcc688c8 docs(07-01): complete phase 7 plan 1 summary — unified service catalog expand phase
Phase 7 Plan 1 execution complete:
- Task 1: services table schema with audit trail (migrated_from/migrated_id)
- Task 2: Idempotent backfill script (21 service_catalog + 35 offer_services rows)
- Task 3: Zero-data-loss validation suite (5-check verification)

All code ready to run; database migration pending external DB connectivity.
Schema changes are additive-only, Data Safety LOCKED constraints honored.
No data deleted, no tables dropped, legacy compatibility preserved.

Commits: e4ddb87 (schema), de0888b (scripts)
Duration: 3m 14s
Status: Ready for database migration

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-11 06:22:33 +02:00
simone bdcdd26f17 docs(07): create phase plan for Unified Service Catalog
Two-plan, two-wave migration: schema + backfill (07-01) then admin
catalog CRUD rewire (07-02), per CAT-U-01/CAT-U-02 and the
expand-contract pattern from PITFALLS_V2 Pitfall 1.
2026-06-11 06:14:05 +02:00