Files
InsanityLab-web/.superpowers/sdd/task-final-fix-report.md
T
Adriano b913a2bf90 registri dei piani in git (AI-OS#309)
Refs gitea:Adriano/AI-OS#310

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-06 10:36:26 +02:00

1.3 KiB

Fix sicurezza post-review (2026-07-05)

I1 - Open redirect via backslash in safeNext

  • File: src/lib/safe-next.ts
  • Fix: aggiunto check if (next && next.includes('\\')) return '/'; in testa alla funzione, prima degli altri controlli. Blocca /\evil.com e varianti che i browser normalizzano a //evil.com.
  • Test: tests/safe-next.test.ts, aggiunti 2 case in "rifiuta esterni...": safeNext('/\\evil.com') e safeNext('/\\/evil.com') → entrambi '/'. Verificato TDD: test falliva prima del fix (received /\evil.com), verde dopo.

I2 - Ownership guard mancante su /admin/edit/[id]

  • File: src/pages/admin/edit/[id].astro
  • Fix: import canModifyPost da '../../../lib/posts', aggiunto dopo il check post-esiste: const u = Astro.locals.user!; e if (!canModifyPost(u.role, u.id, post)) return Astro.redirect('/admin');
  • Chiude falla di lettura: prima un utente ruolo 'user' poteva aprire l'edit di post altrui e leggere body/bozze (il salvataggio via API era già protetto a 403, la GET no).

Verifica

  • npm test → 14 test files, 70 test, tutti verdi (incluso tests/safe-next.test.ts).
  • npm run build → completato senza errori (astro build, adapter node, server mode).
  • Commit: 7211d74 "fix(sicurezza): safeNext blocca backslash (open redirect) + guardia ownership su /admin/edit"