Che cos’è XSS (Cross-Site Scripting)?
Cross-Site Scripting, o XSS, è un difetto di sicurezza nei siti web che consente agli attaccanti di aggiungere script dannosi alle pagine web. La maggior parte delle volte, questi script sono scritti in JavaScript.
Se qualcuno visita una pagina interessata da XSS, il suo browser esegue lo script dell’attaccante. Questo può portare al furto di cookie, sessioni compromesse o azioni eseguite senza il permesso dell’utente.
XSS, come SQL Injection, è regolarmente elencato nel OWASP Top 10 come una delle vulnerabilità più comuni delle applicazioni web.

Come funziona XSS?
XSS spesso prende di mira applicazioni web che non controllano e puliscono correttamente l’input dell’utente.
Ad esempio, se una casella di commento consente HTML o JavaScript grezzo senza alcun filtro, un attaccante potrebbe aggiungere codice come questo:
<script>alert('Hacked!');</script>
Quando le vittime visualizzano la pagina, il codice dannoso viene eseguito nel loro browser.
Perché XSS è importante nella cybersecurity
XSS può portare a una violazione più grande:
- Acquisizione dell’account (furto di cookie di sessione per impersonare gli utenti)
- Furto di dati (cattura di input di moduli come password o carte di credito)
- Attacchi di phishing (iniezione di moduli di login falsi)
- Distribuzione di malware (reindirizzamento degli utenti a siti web dannosi)
Tipi di XSS
- XSS basato su DOM
- L’attacco avviene interamente nel browser manipolando il Document Object Model (DOM) senza coinvolgere il server.
- XSS memorizzato
- Lo script dannoso è permanentemente memorizzato sul server, come nel database o nella pagina del profilo.
- XSS riflesso
- Lo script è riflesso da un server web (ad esempio, nell’URL o nel messaggio di errore), lo script verrà eseguito quando la vittima clicca sul link creato dagli attaccanti.
Come prevenire XSS
- Sanitizzazione dell’input e codifica dell’output: pulire sempre i dati di input dell’utente prima di elaborarli, trasformando l’input dell’utente in un formato sicuro
- Utilizzare Content Security Policy (CSP): limita quali script possono essere eseguiti nel browser.
- Evitare eval() e JavaScript inline: per ridurre i rischi di iniezione.
- Test di sicurezza (DAST/IAST): eseguire test di sicurezza per rilevare vulnerabilità precocemente
Esempio in caso reale - Samy worm (MySpace, 2005)
Cosa è successo: Samy Kamkar ha pubblicato un profilo MySpace che conteneva un payload XSS memorizzato. Quando altri utenti visualizzavano il profilo, il payload veniva eseguito nei loro browser, (a) aggiungeva Samy come amico, (b) aggiungeva la frase “Samy è il mio eroe” ai loro profili, e (c) si replicava nelle pagine dei profili di quegli utenti.
Impatto: Il worm si è auto-propagato a ~1 milione di utenti entro ~20 ore, costringendo MySpace a essere offline temporaneamente.
Perché ha funzionato: MySpace permetteva HTML/attributi non escapati nei campi del profilo, consentendo l’esecuzione di script memorizzati nei browser dei visitatori.
Lezioni / correzione: Corretta codifica dell’output, sanitizzazione dell’input, rimozione di HTML nei campi del profilo e patching rapido. Samy ha successivamente affrontato conseguenze legali e MySpace ha implementato filtri.
Termini correlati
- Iniezione SQL
- DAST (Test di Sicurezza delle Applicazioni Dinamiche)
- OWASP Top 10
- CSRF (Cross-Site Request Forgery)