
Come prevenire gli attacchi di cross-site scripting (XSS)?
Scoprite come prevenire gli attacchi XSS, individuare le vulnerabilità ed eliminare le minacce latenti. La nostra guida illustra i principi fondamentali della prevenzione degli attacchi di cross-site scripting.

In seguito alle più recenti vulnerabilità di cross-site scripting (XSS), l'FBI e la CISA hanno rafforzato le misure di sicurezza e si sono concentrate sul miglioramento della resilienza informatica. Non sorprende che le organizzazioni spesso trascurino le misure fondamentali, aprendo la strada alle violazioni dei dati.
Gli attacchi di cross-site scripting si verificano quando le app e i servizi web non gestiscono correttamente le richieste o gli input oppure non funzionano come previsto. Sono pericolosi perché prendono di mira non solo le app, ma anche i loro utenti.
Ecco una guida agli attacchi di cross-site scripting e a tutto ciò che dovete sapere sull'argomento.
Cosa sono gli attacchi di cross-site scripting (XSS)?
Nessuna app o sito web è perfetto; esistono vulnerabilità nascoste. Gli attacchi di cross-site scripting sfruttano queste vulnerabilità inviando codice dannoso che ne altera il funzionamento. Possono dare a un aggressore il controllo dell'identità di una vittima, fino a consentirgli di impersonarla.
Lo script dannoso si nasconde nell'app web, quindi è difficile da rilevare. Si confonde con il codice sorgente dell'app, impedendo ai servizi di verificare se provenga da fonti non attendibili. Qual è il risultato?
Gli hacker accedono ai cookie, ai token dei siti e ad altri dati sensibili raccolti dal vostro browser web. Se il vostro sito o la vostra app distribuisce contenuti in luoghi diversi, anche questi vengono intercettati automaticamente. Sono vulnerabili anche i forum online e le bacheche in cui gli utenti possono commentare i post.
Tipi di attacchi di cross-site scripting (XSS)
In passato, le vulnerabilità XSS hanno dato origine a worm e compromesso le misure di sicurezza delle applicazioni. Possono diffondere malware, sottrarre credenziali tramite phishing e prendere il controllo di siti web dedicati alla difesa.
Esistono tre tipi principali di attacchi di cross-site scripting (XSS). Prima di scoprire come prevenirli, conoscete le minacce che dovete affrontare. Sono le seguenti.
1. XSS memorizzato (XSS persistente)
È una delle forme di XSS più semplici, ma anche più pericolose. Nell'XSS memorizzato, il codice dannoso viene salvato nei database web quando manca la convalida degli input. L'aggressore inserisce il codice sfruttando una vulnerabilità dell'app web e lo memorizza in modo permanente. La vittima può eseguire lo script senza saperlo: il payload viene inviato al suo browser web come codice HTML. Quando carica la pagina web ed esegue lo script dannoso, il danno è fatto.
Un esempio classico è un commento lasciato su un post di un blog. L'aggressore può inserire un URL e indurre la vittima a fare clic per leggere il commento. Quando l'utente interagisce con il contenuto, il codice viene eseguito automaticamente.
2. XSS riflesso (XSS non persistente)ingegneria sociale minacce, link dannosi e altre tattiche di phishing per indurre le vittime a effettuare richieste al server. L'unico inconveniente di questa tecnica è che l'autore dell'attacco deve inviare i payload individuali alle vittime separatamente. Non è possibile inviare payload in massa; la maggior parte degli attacchi XSS riflessi viene effettuata sui social network.
Quando il payload di un aggressore entra a far parte della risposta inviata al browser web, si tratta di un attacco XSS riflesso. La richiesta viene riflessa dal browser, così la risposta HTTP include il payload della richiesta HTTP. Gli hacker possono combinare minacce di ingegneria sociale, link dannosi e altre tattiche legate alle truffe di phishing per indurre le vittime a inviare richieste al server. Il limite di questa tecnica è che l'aggressore deve inviare un payload separato a ciascuna vittima. Non può distribuirli in massa; la maggior parte degli attacchi XSS riflessi avviene sui social network.
3. XSS basato sul DOM
L'XSS basato sul DOM comporta la compromissione degli account utente tramite codice JavaScript dannoso proveniente da una sorgente controllata dall'aggressore. Il codice viene passato a un sink, che lo esegue dinamicamente e in modo arbitrario. L'URL del browser è la sorgente più comune di questi attacchi di cross-site scripting. L'aggressore aggiunge anche un link per indirizzare le vittime a pagine vulnerabili, con payload incorporati nelle stringhe di query. Può inoltre frammentare parti dell'URL e manipolare ulteriormente le vittime indirizzandole altrove.
Come funziona il cross-site scripting (XSS)?
Il cross-site scripting sfrutta i siti web vulnerabili per inviare agli utenti codice JavaScript dannoso. Quando l'aggressore inserisce il codice dannoso e lo esegue nel browser della vittima, può compromettere completamente le sue applicazioni e le successive interazioni con esse.
Gli iframe cross-origin non consentono agli utenti di chiamare la funzione alert. Vengono utilizzati in alcuni degli attacchi XSS più avanzati. L'aggressore può anche ottenere il controllo dei privilegi e degli accessi degli utenti nelle app web e impadronirsi dei dati che custodiscono.
Gli attacchi e le vulnerabilità di cross-site scripting possono consentire all'aggressore di impersonare la vittima all'interno della rete. Possono aggirare le policy di origine. Possono separare completamente siti web diversi.
Ecco una panoramica semplificata del funzionamento di un attacco di cross-site scripting:
- Gli attacchi XSS sono pericolosi, soprattutto se prendono di mira agenzie governative, organizzazioni sanitarie o aziende che forniscono risorse vitali durante le crisi.
- L'aggressore vi invia un link dannoso. Quando fate clic, il codice viene inserito e il contenuto dinamico viene inviato al browser web.
- Viene inviata una richiesta HTTP al server web dell'aggressore. Quest'ultimo può quindi usare i cookie rubati per impersonarvi.
- Può accedere a informazioni sensibili e condurre attacchi di ingegneria sociale più avanzati.
- Gli attacchi di cross-site scripting consentono agli aggressori di aggirare le policy della stessa origine, progettate per mantenere separati i diversi siti web. Questi attacchi possono danneggiare gravemente la reputazione della vostra azienda. L'avversario può alterare i contenuti della vostra organizzazione e danneggiarne l'immagine.
- Può diffondere informazioni false, modificare le istruzioni sui vostri siti web e indirizzare gli utenti altrove.
Gli attacchi XSS sono pericolosi, soprattutto se prendono di mira enti governativi, organizzazioni sanitarie o aziende che forniscono risorse essenziali durante le crisi.
Come prevenire gli attacchi di cross-site scripting (XSS)?
Potete adottare diversi approcci. Scopriteli per sapere come prevenire gli attacchi di cross-site scripting:
- Ecco alcuni altri approcci che è possibile adottare:
- Convalidate gli input delle app e dei servizi web per prevenire gli attacchi di cross-site scripting (XSS). Potete anche usare uno scanner di vulnerabilità per individuare altre vulnerabilità di sicurezza nei vostri siti web. È uno dei modi migliori per prevenire automaticamente gli attacchi XSS.
- Un secondo metodo per prevenire gli attacchi XSS consiste nel codificare i dati in output. Idealmente, fatelo prima di inserire i dati in una pagina. Il tipo di codifica necessario dipende dal contesto in cui scrivete i dati.
- Per esempio, i valori delle stringhe JavaScript richiedono una codifica diversa da quella usata in un contesto HTML. In un contesto HTML, dovete convertire i valori non inclusi nella lista dei valori consentiti in entità HTML. In un contesto di stringhe JavaScript, invece, dovete applicare l'escape Unicode ai valori non alfanumerici.
- Potrebbero essere necessari più livelli di codifica, da applicare nell'ordine corretto. Dovete incorporare gli input degli utenti nei gestori di eventi e gestire i contesti HTML e JavaScript. Esistono numerosi modi per convalidare gli input al momento della ricezione.
- Per esempio, se un utente invia un URL che viene restituito in una risposta, potete convalidarlo verificando che inizi con un protocollo come HTTPS o HTTP. Potete anche convalidare i valori quando un utente li inserisce in forma alfabetica o numerica. Un'altra possibilità è limitare l'input a un insieme previsto di caratteri.
Ecco altri approcci che potete adottare:
- Potete creare un elenco di tutti i protocolli sicuri consentiti sul vostro sito web. Le vostre difese bloccheranno così automaticamente, per impostazione predefinita, i protocolli dannosi che non riconoscono. In questo modo, gli attacchi XSS non potranno mascherare valori non validi aggirando gli elenchi di blocco.
- Agli utenti non dovrebbe essere consentito pubblicare markup HTML, ma a volte è necessario. Potete filtrare i tag dannosi implementando elenchi di elementi consentiti. Questi manterranno i tag sicuri e filtreranno il codice dannoso associato ai tag bloccati. Tutti i tag non presenti negli elenchi dei consentiti saranno considerati bloccati, a meno che non specifichiate diversamente.
- Dovete monitorare gli aggiornamenti di sicurezza del vostro sito web. Supponiamo che intendiate usare librerie JavaScript per filtrare e codificare i dati direttamente nel browser dell'utente. In tal caso, potete prevenire gli attacchi XSS anche con un motore di template lato server. Può incorporare contenuti dinamici in HTML e definire codice specifico.
- Potete anche usare filtri con argomenti e definire il contesto. Questo può prevenire la maggior parte degli attacchi XSS. Potete inoltre riesaminare periodicamente queste funzionalità di escape per valutare se continuare a usare il motore di template o il framework.
- PHP include anche funzioni integrate per codificare le entità, che potete chiamare per applicare l'escape agli input quando i valori si trovano in un contesto HTML. Potete chiamarle con tre argomenti e dovete applicare l'escape Unicode agli input. PHP non offre API per applicare l'escape Unicode alle stringhe.
- Convertite le stringhe in entità HTML e poi chiamate le funzioni. Potete usare un codificatore HTML personalizzato per prevenire gli attacchi XSS tramite JavaScript lato client.
Attacchi di cross-site scripting (XSS): consigli per la prevenzione (best practice)
Le migliori pratiche che potete adottare per prevenire gli attacchi XSS sono:
- Se prevedi di passare dati non attendibili ai tuoi selettori jQuery, assicurati di eseguire correttamente l'escape dei valori utilizzando la funzione js—escape. Puoi anche mitigare gli attacchi XSS sfruttando le politiche di sicurezza dei contenuti. Queste possono aiutarti a controllare vari aspetti della gestione degli script esterni, come il loro caricamento e l'esecuzione di script inline.
- Sanificate gli input degli utenti e codificate i dati di output.
- Potete sostituire i caratteri speciali con valori codificati, così che tutti i dati vengano elaborati come testo anziché come codice. Se il contenuto è semplice testo, un aggressore non può iniettare uno script dannoso. Se applicate correttamente la codifica, gli utenti non subiranno conseguenze in questo modo.
- Potete applicare diversi tipi di codifica in base alla logica di business o al tipo di applicazione, tenendo conto anche dei dati archiviati ed elaborati. Esistono vari metodi, tra cui la codifica delle entità HTML, una delle misure più semplici. Potete codificare anche i valori degli attributi.
- Un'altra buona pratica per prevenire gli attacchi XSS è filtrare i dati ricevuti lato client. Il filtraggio rimuove elementi pericolosi come tag, gestori di eventi HTML ed elementi JavaScript dannosi.
- Potete generare le risposte delle pagine web combinando il filtraggio dell'input e dell'output. Questo metodo è particolarmente efficace contro gli attacchi XSS persistenti.
- La convalida dell'input degli utenti è un'altra misura di sicurezza. Per esempio, se configurate i campi di input in modo che accettino solo dati testuali, gli utenti non potranno inserire numeri. Questa misura funziona bene per i moduli web: potete convalidare gli input per impedire agli aggressori di caricare script dannosi tramite l'autorizzazione. I browser web consentono l'accesso solo alle risorse autorizzate e ignorano tutti gli altri domini. Gli script iniettati non verranno eseguiti, anche se un aggressore individua vulnerabilità di tipo XSS.
- Per prevenire gli attacchi cross-site scripting in jQuery, potete passare gli input degli utenti a un selettore jQuery. Il metodo più comune consiste nell'usare location. Hash e passare il selettore per visualizzare l'HTML. jQuery può riconoscere il problema e correggere la logica del selettore verificando se gli input iniziano con un hash.
- Potete specificare quali risorse, come immagini e script, possono essere caricate dall'origine del sito. Se un aggressore inietta payload XSS, non potrà caricare risorse esterne all'origine corrente. Il selettore jQuery può ridurre significativamente il rischio di un attacco XSS o di una vulnerabilità XSS.
Se prevedete di passare dati non attendibili ai selettori jQuery, assicuratevi di eseguire correttamente l'escape dei valori usando la funzione js—escape. Potete mitigare gli attacchi XSS anche con le policy di sicurezza dei contenuti. Queste vi danno il controllo su diversi aspetti della gestione degli script esterni, tra cui il loro caricamento e l'esecuzione degli script inline.
Esempi comuni di attacchi XSS
Ecco alcuni esempi reali di attacchi XSS:
- Conclusione
- Nel 2018, British Airways è stata colpita da MageCart, un noto gruppo di hacker. Il gruppo ha sfruttato una vulnerabilità XSS in una libreria JavaScript. I dati dei clienti sono stati inviati a un server dannoso con un nome di dominio simile a quello del sito ufficiale. Il gruppo ha sottratto dati di carte di credito relativi a oltre 380.000 prenotazioni, causando ingenti perdite alla compagnia aerea prima che la violazione venisse scoperta.
- Fornite è un popolare gioco multiplayer online che ha subito un attacco XSS. Una vulnerabilità nel sistema SSO ha reindirizzato gli utenti a una falsa pagina di accesso, dove sono state rubate le loro credenziali. I giocatori hanno perso anche valute virtuali nel gioco e le loro conversazioni registrate sono state divulgate.
- Una vulnerabilità XSS di eBay ha dato agli aggressori pieno accesso agli account dei venditori. Gli aggressori hanno manipolato la posizione delle inserzioni di eBay e hanno continuato i loro attacchi anche dopo che eBay aveva individuato e corretto la vulnerabilità.
Conclusioni
Gli attacchi cross-site scripting sono tra le minacce più gravi per la sicurezza web: compromettono i dati degli utenti e minano la fiducia nelle piattaforme online. Conoscere i tipi di attacco XSS e applicare misure di prevenzione adeguate permette agli sviluppatori di proteggere le proprie applicazioni. Tra queste misure rientrano la convalida degli input, la codifica dell'output e l'applicazione di policy di sicurezza dei contenuti. e gli strumenti sofisticati di rilevamento delle minacce sono essenziali per garantire una presenza online sicura e protetta. Con l'avanzare della tecnologia, anche la metodologia degli aggressori si evolve, quindi la cautela è fondamentale. Dando priorità alla prevenzione degli attacchi XSS, le organizzazioni possono salvaguardare la loro reputazione e garantire l'integrità della loro presenza online.
Gli audit di sicurezza e gli strumenti avanzati di rilevamento delle minacce sono essenziali per garantire una presenza online sicura. Con l'evoluzione della tecnologia, evolvono anche i metodi degli aggressori: la cautela resta fondamentale. Dando priorità alla prevenzione degli attacchi XSS, le organizzazioni proteggono la propria reputazione e l'integrità della propria presenza online.
Domande frequenti
Gli attacchi XSS consistono nell'iniettare script dannosi nei siti web per accedere ai dati sensibili degli utenti. Sfruttano le vulnerabilità delle applicazioni web, spesso attraverso gli input degli utenti o URL manipolati.
Gli sviluppatori possono prevenire gli attacchi XSS controllando gli input degli utenti, codificando i dati di output e consentendo solo gli script dannosi. Anche gli audit di sicurezza periodici e le policy di sicurezza dei contenuti riducono i rischi.
Gli attacchi XSS sfruttano le applicazioni web iniettando script dannosi che vengono eseguiti nei browser degli utenti, aggirano i controlli di sicurezza e accedono a informazioni sensibili.
Gli attacchi XSS vanno prevenuti perché possono causare fughe di dati, perdite finanziarie e danni alla reputazione. Minano inoltre la fiducia degli utenti e possono veicolare malware o attacchi di phishing.
Tra gli strumenti e le misure disponibili rientrano gli scanner di vulnerabilità, i firewall per applicazioni web e i sistemi avanzati di rilevamento delle minacce. Rilevano le vulnerabilità e bloccano l'esecuzione degli script dannosi.
Sì. Un WAF può bloccare gli attacchi XSS filtrando il traffico e identificando gli script dannosi prima che interagiscano con l'applicazione.
Per verificare le vulnerabilità XSS si usano scanner di vulnerabilità e strumenti di penetration testing, che simulano gli attacchi e individuano possibili punti di ingresso per gli script dannosi.
Per proteggervi dalle minacce in evoluzione, eseguite regolarmente scansioni di sicurezza per le vulnerabilità XSS, idealmente ogni tre mesi.




