
Cross-site Scripting (XSS) è una tecnica di attacco che consiste nel riflettere codice fornito dall'attaccante nell'istanza del browser di un utente. Un'istanza del browser può essere un client browser web standard o un oggetto browser incorporato in un prodotto software, come il browser all'interno di WinAmp, un lettore RSS o un client di posta elettronica. Il codice stesso è solitamente scritto in HTML/JavaScript, ma può estendersi anche a VBScript, ActiveX, Java, Flash o qualsiasi altra tecnologia supportata dal browser.
Quando un attaccante induce il browser di un utente a eseguire il proprio codice, il codice verrà eseguito nel contesto di sicurezza (o zona) del sito web ospitante. Con questo livello di privilegio, il codice ha la capacità di leggere, modificare e trasmettere qualsiasi dato sensibile accessibile dal browser. Un utente colpito da Cross-site Scripting può vedersi rubare l'account (furto di cookie), il browser può essere reindirizzato verso un'altra posizione, oppure può ricevere contenuti fraudolenti forniti dal sito che sta visitando. Gli attacchi Cross-site Scripting compromettono essenzialmente il rapporto di fiducia tra un utente e il sito web. Le applicazioni che utilizzano istanze di oggetti browser che caricano contenuti dal file system possono eseguire codice nella zona della macchina locale, consentendo la compromissione del sistema.
Esistono tre tipi di attacchi Cross-site Scripting: non persistenti, persistenti e basati su DOM. Gli attacchi non persistenti e quelli basati su DOM richiedono che un utente visiti un link appositamente creato e infarcito di codice malevolo, oppure visiti una pagina web dannosa contenente un modulo web che, una volta inviato al sito vulnerabile, innescherà l'attacco. L'uso di un modulo dannoso avviene spesso quando la risorsa vulnerabile accetta solo richieste HTTP POST. In tal caso, il modulo può essere inviato automaticamente, all'insaputa della vittima (ad esempio usando JavaScript). Cliccando sul link malevolo o inviando il modulo dannoso, il payload XSS verrà rimandato indietro e interpretato dal browser dell'utente, che lo eseguirà. Un'altra tecnica per inviare richieste quasi arbitrarie (GET e POST) consiste nell'utilizzare un client incorporato, come Adobe Flash. Gli attacchi persistenti si verificano quando il codice malevolo viene inviato a un sito web dove viene archiviato per un periodo di tempo. Esempi dei bersagli preferiti da un attaccante includono spesso post su forum di messaggi, messaggi di webmail e software di chat web. L'utente ignaro non è tenuto a interagire con alcun sito/link aggiuntivo (ad esempio un sito dell'attaccante o un link malevolo inviato via email), ma deve semplicemente visualizzare la pagina web contenente il codice.