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>
This commit is contained in:
2026-10-06 10:36:26 +02:00
parent 9126af28ce
commit b913a2bf90
94 changed files with 40294 additions and 0 deletions
+18
View File
@@ -0,0 +1,18 @@
## 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"