Che cos’è XSS (Cross-Site Scripting)?
Cross-Site Scripting, o XSS, è una vulnerabilità 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 colpita da XSS, il suo browser esegue lo script dell’attaccante. Questo può portare al furto di cookie, al dirottamento delle sessioni o ad azioni eseguite senza il permesso dell’utente.
XSS, come l’SQL Injection, è regolarmente elencato nell’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 un codice come questo:
<script>alert('Hacked!');</script>
Quando le vittime visualizzano la pagina, il codice dannoso viene eseguito all’interno del loro browser.
Perché XSS è importante nella sicurezza informatica
XSS può portare a una violazione più ampia:
- 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 è memorizzato permanentemente sul server, come nel database o nella pagina del profilo.
- XSS Riflesso
- Lo script è riflesso da un server web (ad esempio, in un URL o in un messaggio di errore), lo script verrà eseguito quando la vittima clicca sul link creato dagli attaccanti.
Come Prevenire l’XSS
- Sanitizzazione degli input e codifica degli output: pulire sempre i dati di input dell’utente prima di elaborarli, trasformando l’input dell’utente in un formato sicuro
- Usare 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 le vulnerabilità in anticipo
Esempio in un Caso Reale - Samy worm (MySpace, 2005)
Cosa è successo: Samy Kamkar ha pubblicato un profilo MySpace che conteneva un payload di 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 in circa 20 ore, costringendo MySpace a rimanere offline temporaneamente.
Perché ha funzionato: MySpace permetteva HTML/attributi non filtrati 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
- SQL Injection
- DAST (Dynamic Application Security Testing)
- OWASP Top 10
- CSRF (Cross-Site Request Forgery)