b913a2bf90
Refs gitea:Adriano/AI-OS#310 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
19 lines
1.3 KiB
Markdown
19 lines
1.3 KiB
Markdown
|
|
## 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"
|