PHP: filtrare l’input dei form per prevenire gli attacchi XSS

La sicurezza assoluta non esiste, ma filtrare l'input dei form in PHP è un buon approccio per prevenire gli attacchi XSS.

Gli attacchi di tipo XSS (Cross-Site Scripting) sono una delle pratiche più diffuse (e fastidiose) di inserimento di contenuti malevoli su pagine web dinamiche. In passato questo tipo di attacchi poteva avere conseguenze disastrose per l’utente in alcuni browser (IE 5.5 su Windows 98 aveva un bug che permetteva la scrittura nel registro di sistema direttamente tramite VBScript). Con l’andare del tempo e l’evoluzione dell’euristica degli antivirus, le conseguenze di questo tipo di attacchi sono state in un certo senso limitate ma non hanno mai perso la loro pericolosità. Per prevenire questo tipo di attacchi in PHP occorre convincersi che ogni tipo di input da parte dell’utente è potenzialmente pericoloso (gli esperti americani parlano di tainted data) e usare il maggior numero di filtri possibile prima di lavorare effettivamente sui dati passati da un form. La funzione che presento in questo articolo non è la soluzione definitiva al problema XSS, ma solo un altro filtro che possiamo aggiungere agli altri già esistenti.

La funzione è la seguente:

Questa funzione filtra le entità SGML, rimuove gli attributi degli eventi inline JavaScript, elimina i protocolli di scripting dagli URL e le espressioni dinamiche di Internet Explorer. Infine, filtra i tag indesiderati.