b913a2bf90
Refs gitea:Adriano/AI-OS#310 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
1.3 KiB
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.come varianti che i browser normalizzano a//evil.com. - Test: tests/safe-next.test.ts, aggiunti 2 case in "rifiuta esterni...":
safeNext('/\\evil.com')esafeNext('/\\/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
canModifyPostda '../../../lib/posts', aggiunto dopo il check post-esiste:const u = Astro.locals.user!;eif (!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"