Php

Sanitizzazione dei Dati in PHP: Prevenire Iniezioni di Codice e XSS

Sanitizzazione dei Dati in PHP: Prevenire Iniezioni di Codice e XSS
LT
Luca Terribili
Autore

L'iniezione di codice e il Cross-Site Scripting (XSS) sono due delle minacce più comuni che possono colpire i siti web. Entrambi consistono nell'iniettare del codice malevolo all'interno di un sito web, il che può portare a conseguenze devastanti per gli utenti e l'azienda stessa.Codice injection e XSS spesso vengono spiegati come se fossero la stessa cosa con un nome diverso, ma il bersaglio è opposto: l'injection PHP attacca il server (esegue codice non voluto sul backend), l'XSS attacca il browser di un altro utente (esegue JavaScript non voluto nella sua sessione). Confonderli porta a difese sbagliate — sanificare per l'uno non protegge automaticamente dall'altro.

Per l'XSS, htmlspecialchars() è la difesa di base: converte <, >, " in entità HTML, così un tag <script> iniettato in un campo di input finisce visualizzato come testo innocuo invece che eseguito come codice. strip_tags() va oltre e rimuove i tag del tutto, utile quando il campo non deve accettare markup HTML in nessuna forma.

Per l'injection SQL, però, c'è un errore da non fare: mysql_real_escape_string() non esiste più da PHP 7 — la vecchia estensione mysql_* è stata rimossa completamente nel 2018, non solo deprecata. E anche quando esisteva, l'escaping manuale non era mai la difesa consigliata: lo è ancora meno oggi. Lo standard attuale sono le prepared statement, con PDO o mysqli, dove i parametri della query vengono passati separatamente dalla struttura SQL — il database stesso garantisce che non possano alterare la query, senza bisogno di scappare manualmente nessun carattere.

$stmt = $pdo->prepare('SELECT * FROM utenti WHERE email = ?');
$stmt->execute([$email]);

Per prevenire queste minacce è necessario implementare la sanitizzazione dei dati in PHP. La sanitizzazione consiste nell'eliminare o modificare i caratteri speciali all'interno di un campo di input prima che vengano utilizzati da un'applicazione.

In PHP ci sono diverse funzioni che possono essere utilizzate per sanificare i dati. Ad esempio, la funzione htmlspecialchars() può essere utilizzata per convertire i caratteri speciali in entità HTML, mentre la funzione strip_tags() può essere utilizzata per eliminare gli elementi di tag HTML.

Ecco alcuni esempi di come potrebbe essere implementata la sanitizzazione dei dati in PHP:

<?php
$nome = $_GET['nome'];
$nome = htmlspecialchars($nome);
// Utilizzo del nome sanificato
?>
<?php
$testo = $_POST['testo'];
$testo = strip_tags($testo);
// Utilizzo del testo sanificato
?>

Inoltre, PHP offre diverse funzioni di sicurezza che possono essere utilizzate per prevenire le iniezioni di codice e XSS. Ad esempio,Questa singola riga protegge da SQL injection meglio di qualsiasi combinazione di funzioni di escaping, perché elimina il problema alla radice invece di filtrare l'input dopo il fatto.

Ecco alcuni esempi di come potrebbe essere implementato il uso di queste funzioni:

<?php
$nome = $_GET['nome'];
$nome = mysql_real_escape_string($nome);
// Utilizzo del nome sanificato
?>
<?php
$dati = array('nome' => 'Mario', 'cognome' => 'Rossi');
$output = json_encode($dati);
echo $output;
?>

Inoltre, è importante utilizzare il framework di sicurezza PHP, chiamato filter, per sanificare i dati all'interno di un'applicazione. Il filter offre diverse funzioni che possono essere utilizzate per sanificare i dati, come ad esempio la funzione filter_var().

Ecco alcuni esempi di come potrebbe essere implementato l'utilizzo del filter:

<?php
  $nome = $_GET['nome'];
  $nome = filter_var($nome, FILTER_SANITIZE_STRING);
  // Utilizzo del nome sanificato
?>

In conclusione, la sanitizzazione dei dati in PHP è un'importante misura di sicurezza che può aiutare a prevenire le minacce di iniezionaizione di codice e XSS. Ci sono diverse funzioni di sicurezza che possono essere utilizzate per sanificare i dati, come ad esempio la sanitizzazione dei caratteri speciali, il uso delle funzioni di sicurezza PHP e l'utilizzo del framework filter. Inoltre, è importante utilizzare sempre le funzioni di sicurezza PHP per prevenire le minacce e proteggere i dati degli utenti.

Vedi tutti →