Che cos'è lo scripting tra siti?

click fraud protection

Una delle classi di vulnerabilità più comuni nei siti Web è denominata "Cross-Site Scripting" o "XSS". Le vulnerabilità XSS sono dove è possibile per un utente causare l'esecuzione di JavaScript. Esistono diverse varianti della vulnerabilità XSS, con vari gradi di gravità.

Il problema con un utente malintenzionato che è in grado di eseguire JavaScript nelle sessioni di altri utenti è che è quindi possibile per l'attaccante fare qualsiasi cosa sul sito Web visualizzato dalle vittime. Ciò include il reindirizzamento delle vittime a siti Web esterni, il furto di token di autenticazione e il monitoraggio dei dettagli di pagamento.

La forma più grave di vulnerabilità XSS è "Stored" o "Persistent" Cross-Site Scripting, qui è dove è possibile per un utente malintenzionato creare un payload XSS e quindi inviarlo, in modo che venga salvato nel database. Con un exploit XSS salvato nel database è quindi possibile che influisca su altri utenti per un ampio periodo di tempo.

Un'altra forma di Cross-Site Scripting è "Reflected", questo tipo non viene salvato in nessun momento, invece, il payload è incluso nel browser. In genere, questo tipo di XSS fa parte degli attacchi di phishing, in cui un utente malintenzionato tenta di indurre una vittima a fare clic su un collegamento dannoso.

Generalmente, la maggior parte degli attacchi XSS ha il payload inviato al server ad un certo punto, ma alcuni attacchi lo sono puramente lato client, non viene mai inviato al server e interessa solo lato client JavaScript. Questo è chiamato XSS basato su DOM poiché rimane nel JavaScript Document Object Model, o DOM. Questo tipo di vulnerabilità è particolarmente difficile da identificare e risolvere perché gli exploit non vengono mai visti dal server e quindi non possono essere registrati.

Storicamente la tecnica di prevenzione contro le vulnerabilità XSS consiste nel filtrare tutti i dati inviati dagli utenti, utilizzando elenchi di blocchi per rifiutare qualsiasi messaggio con caratteri o parole significativi in ​​JavaScript. Ciò tendeva a portare a una corsa agli armamenti per trovare bypass per il filtro, impedendo anche alcuni invii legittimi degli utenti. La soluzione corretta consiste nell'utilizzare entità HTML per codificare i dati inviati dall'utente. con i moduli delle entità HTML abilitati, i caratteri vengono codificati automaticamente in un formato in cui il browser sa di visualizzarli come i simboli corretti ma non di trattarli come codice.