Realizzazione by siti.web.firenze e web.at.work

contatti
realizzazione siti web

PHP convertire le stringhe | htmlspecialchars e htmlentities

htmlspecialchars($input)
htmlentities($input)

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.

<?php
$input = '<script>alert("Io ho una cattiva onda soffiata, ' .
'per questo attacco i siti web.");</script>';

echo htmlspecialchars($input) . '<br />';
echo htmlentities($input);
?>

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 &lt; e &gt;. 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à &ouml;.

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.

Se desiderate comunque preparare le stringhe in modo da utilizzarle nelle URL, dovete applicare urlencode() per codificare in maniera corretta i caratteri speciali, quali lo spazio, che possono essere utilizzati nelle URL.

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.

<?php
$input = 'I miei genitori mi <i>odiano</i>, <br />' .
'per questo <b>attacco</b> i siti web. ' .
'<script>alert("Ottima prova!");</script>' .
'<img src="explicit.jpg" />';

echo strip_tags($input, '<b><br /><i>');
?>

Restituisce:

I miei genitori mi odiano
Per questo attacco i siti web. alert("Ottima prova!");

 

separatore

Informazioni sull'autore

Sergio Ferraiolo

foto
Descrizione:

Web Master di webdesignfirenze.com, titolare di web.at.work che ha realizzato il sito.

Mansioni: Programmatore, web designer e Analista