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.
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
innerHTMLe simili con contenuti non sicuri. - L'HTML degli utenti passa da un sanitizzatore affidabile.
- È attiva una Content Security Policy.
- I cookie di sessione usano
HttpOnlyeSecure. - 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.