È uscito il Corso Java Completo — usa il coupon JAVA2026 (fino al 30 giugno)
Torna al blog

Cos'è il XSS (Cross-Site Scripting)

Cos'è il XSS (Cross-Site Scripting) spiegato semplice e in ottica difensiva: i tipi, perché è pericoloso e come prevenirlo con escaping, sanitizzazione e CSP.

Edoardo Midali

Edoardo Midali

Developer · Content Creator

4 min di lettura

Il XSS è una delle vulnerabilità web più frequenti, soprattutto nei siti che mostrano contenuti generati dagli utenti, come commenti, profili o messaggi. Sfrutta la fiducia del browser nel sito e può colpire i visitatori senza che il proprietario se ne accorga.

In questo articolo ti spiego cos'è il XSS in modo semplice e con un taglio puramente difensivo: quali tipi esistono, perché è pericoloso e come prevenirlo con escaping, sanitizzazione e Content Security Policy. Niente payload offensivi, solo buone pratiche.

Cos'è il XSS in parole semplici

Il XSS (Cross-Site Scripting) è una vulnerabilità che permette di inserire codice (di solito JavaScript) all'interno delle pagine di un sito, codice che poi viene eseguito nel browser di altri utenti. Il browser della vittima esegue quel codice fidandosi del sito, perché crede provenga da lì.

La radice del problema è la stessa di altre injection: contenuto fornito dall'utente che finisce in una pagina senza essere trattato come semplice testo, quindi interpretato come codice.

I tipi di XSS

Si distinguono tre forme principali.

Stored (persistente)

Il codice malevolo viene salvato sul server (ad esempio in un commento) e colpisce chiunque visiti quella pagina. È il più pericoloso, perché ha effetto su molti utenti.

Reflected (riflesso)

Il codice arriva tramite una richiesta (ad esempio un parametro nell'URL) e viene "riflesso" nella risposta. Tipicamente la vittima viene attirata su un link costruito ad arte.

DOM-based

Avviene interamente nel browser, quando il JavaScript della pagina manipola contenuti non sicuri direttamente nel DOM, senza passare dal server.

Perché è pericoloso

Un XSS riuscito può consentire di:

  • Rubare cookie e sessioni, impersonando l'utente.
  • Leggere dati mostrati nella pagina.
  • Modificare l'aspetto del sito per ingannare i visitatori.
  • Reindirizzare verso pagine di phishing.

Rientra nella famiglia delle injection della OWASP Top 10 ed è spesso combinato con tecniche di phishing.

Come prevenirlo (la parte che conta)

La difesa dal XSS si basa su pochi principi solidi applicati con costanza.

1. Escaping dell'output

La regola d'oro: ogni dato non fidato che finisce in una pagina va "scappato" in base al contesto (HTML, attributo, JavaScript, URL). I framework moderni come React, Vue e Angular fanno escaping automatico dell'output: sfrutta questo comportamento e non aggirarlo.

2. Evita le funzioni pericolose

Costrutti come innerHTML, dangerouslySetInnerHTML o l'inserimento diretto di HTML grezzo riaprono la porta al XSS. Usali solo quando indispensabile e sempre con contenuto sanitizzato.

3. Sanitizza l'HTML quando serve

Se devi davvero accettare HTML dagli utenti (es. un editor di testo), usa una libreria di sanitizzazione affidabile come DOMPurify, che rimuove i tag e gli attributi pericolosi lasciando solo quelli sicuri.

4. Imposta una Content Security Policy (CSP)

La CSP è un header HTTP che indica al browser da quali fonti può caricare ed eseguire script. Ben configurata, blocca l'esecuzione di codice iniettato anche se una falla dovesse sfuggire. È una rete di sicurezza preziosa.

5. Proteggi i cookie

Usa i flag HttpOnly (i cookie non sono leggibili da JavaScript) e Secure. Così, anche in caso di XSS, i cookie di sessione restano più protetti.

Checklist difensiva

  • L'output non fidato viene sempre scappato nel contesto giusto.
  • Evito innerHTML e simili con contenuti non sicuri.
  • L'HTML degli utenti passa da un sanitizzatore affidabile.
  • È attiva una Content Security Policy.
  • I cookie di sessione usano HttpOnly e Secure.
  • Mantengo aggiornate le librerie frontend.

In sintesi

Il XSS inserisce codice nelle pagine che viene eseguito nel browser degli utenti. La difesa è chiara: escaping dell'output, niente inserimento di HTML grezzo non sicuro, sanitizzazione quando serve, una buona CSP e cookie protetti. Sfruttando i framework moderni, gran parte del lavoro è già automatica.

Se vuoi una verifica di sicurezza del tuo sito per chiudere XSS e altre vulnerabilità, dai un'occhiata ai miei servizi.