Sicurezza

Come sanitizzare un modulo con PHP

Come sanitizzare un modulo con PHP

Il Cross-Site Scripting (XSS) è l’attacco più comune sul web. Fortunatamente esiste un metodo semplice ed efficace per prevenire che i dati inviati con un modulo vengano compromessi. Vediamo insieme quale procedura eseguire per sanitizzare i dati inviati tramite un form inserito su un sito web.

Esempio di modulo vulnerabile

Analizziamo il seguente modulo:

<form action="modulo.php" method="post">
    <textarea name="commento"></textarea>
    <input type="submit" value="Invia">
</form>

I dati inseriti nel campo che abbiamo chiamato “commento” vengono inviati alla pagina modulo.php con il seguente codice PHP:

echo $_POST['commento'];

Una situazione di questo tipo espone il sito ad un attacco da parte di utenti malintenzionati; Il dato inviato, infatti, non viene filtrato e l’output non è in alcun modo gestito. Se un utente invia il seguente JavaScript:

<script>alert('Questa pagina è sotto attacco');</script>

quando il commento viene pubblicato e mostrato sulla pagina, i visitatori che approderanno successivamente su quella pagina vedranno comparire una finestra popup con su scritto “Questa pagina è sotto attacco”.

Come sanitizzare i dati provenienti da un modulo

Per evitare di incorrere in un problema di questo tipo occorre filtrare e validare tutti i dati che vengono inviati tramite form. Il modo più semplice è il seguente:

$filtra_commento = strip_tags($_POST['commento']);

Con la funzione PHP strip_tags() è possibile “ripulire” (sanitizzare) i dati dei moduli rimuovendo eventuali tag HTML e PHP inseriti. Nell’esempio precedente i tag <script> e </script> vengono esclusi dal commento evitando che lo script possa essere eseguito.

Prima di pubblicare i dati di un form è importante rimuovere (escape) caratteri potenzialmente pericolosi in questo modo:

$filtra_commento = htmlentities($filtra_commento, ENT_QUOTES, 'UTF-8');

In questo caso, la funzione PHP htmlentities() converte tutti i caratteri in entità HTML. Questo significa che le virgolette alte singole (‘) vengono convertite in entità HTML evitando l’esecuzione del codice inserito.

Back to list