Un attacco comunemente subito dai siti web è quello chiamato Cross-Site Scripting (XSS). Per esempio, un utente può inserire in una form web alcuni dati pericolosi, come per esempio del codice JavaScript; in questo caso la pagina web pubblicherà queste informazioni letteralmente, senza le giuste contromisure. Un esempio classico sono i guest book web o le form di discussione: le persone inseriscono testo perché sia letto da altri.
In casi come questi è importante rimuovere parte del codice HTML. Per riassumere questo punto: è praticamente impossibile bloccare tutti i tentativi di attacco tramite l'inserimento di JavaScript nei dati. Questo non viene sempre fatto utilizzando il tag <script> ma anche con altri elementi HTML quali <img onerror="badCode()" />. Per questo in molti casi dovrebbe essere rimosso tutto l'HTML.
La maniera migliore per farlo è la chiamata a htmlspecialchars() che permette di convertire le stringhe in HTML e di sostituire tutti i caratteri < e > con < e >. Un'altra opzione è la chiamata a htmlentities(), che sostituisce tutti i caratteri nelle corrispondenti entità. Il codice precedente mostra le differenze tra questi due metodi. Il carattere tedesco ö (o urnlaut) non viene convertito da htmlspecialchars(); invece htmlentities() sostituisce questo con l'entità ö.
L'utilizzo di htmlspecialchars() e htmlentities() restituisce ciò che l'utente ha inserito nel browser. Per questo se l'utente inserisce dei markup in HTML questi vengono pubblicati. Pertanto se htmlspecialchars() e htmlentities() rispondono alle richieste del browser, non avviene altrettanto per quelle dell'utente.
La funzione strip_tags(), invece, elimina tutti gli elementi HTML. Se si desidera mantenere qualche elemento (per esempio alcune limitate funzionalità di formattazione con i tag <b> e <i> e <br />, è possibile fornire una lista di valori consentiti nel secondo parametro di strip_tags(). Lo script che segue mostra questo esempio. Come potete vedere, tutto l'HTML indesiderato è stato rimosso mentre viene mantenuto il contenuto.
Web Master di webdesignfirenze.com, titolare di web.at.work che ha realizzato il sito.
Mansioni: Programmatore, web designer e Analista