Back to home page
Il Jester
My little dream is in developing

Sanitizzazione, validazione ed escaping dei dati

Nello sviluppo di uno script in php, compresi i plugin e i temi WordPress, un aspetto importante e direi fondamentale è la sanitizzazione, la validazione e l’escaping del codice creato. Queste attività, piuttosto noiose, sono fondamentali per scrivere codice sicuro, e dunque evitare – per quanto possibile – iniezione di codice malevolo nei nostri script, finalizzato a violare i dati contenuti nel sito web.

Diverse sono le tecniche di cracking che possono essere utilizzate per “bucare” uno script in php. In primo luogo, abbiamo i cosiddetti attacchi XSS. Da Wikipedia:

Il Cross-site scripting (XSS) è una vulnerabilità che affligge siti web dinamici che impiegano un insufficiente controllo dell’input nei form. Un XSS permette ad un Cracker di inserire o eseguire codice lato client al fine di attuare un insieme variegato di attacchi quali ad esempio: raccolta, manipolazione e reindirizzamento di informazioni riservate, visualizzazione e modifica di dati presenti sui server, alterazione del comportamento dinamico delle pagine web ecc.

Un altro tipo di attacco, piuttosto pericoloso, è il cosiddetto “sql injection”. Sempre da Wikipedia:

SQL injection è una tecnica di code injection, usata per attaccare applicazioni di gestione dati, con la quale vengono inserite delle stringhe di codice SQL malevole all’interno di campi di input in modo che queste ultime vengano poi eseguite (ad esempio per fare inviare il contenuto del database all’attaccante).[1] L’SQL injection sfrutta le vulnerabilità di sicurezza del codice di un’applicazione, ad esempio quando l’input dell’utente non è correttamente filtrato da ‘caratteri di escape’ contenuti nelle stringhe SQL oppure non è fortemente tipizzato e viene eseguito inaspettatamente. L’SQL injection è più conosciuto come attacco per i siti web, ma è anche usato per attaccare qualsiasi tipo di database SQL.

Questo genere di attacchi, possono creare notevoli danni ai siti web, ecco perché è necessario, operare tutte le cautele del caso, anche se poi – è chiaro – non sempre queste sono sufficienti. Ciò perché i cracker trovano sempre modi nuovi per attaccare un sito web, e poi perché nello sviluppo può sempre sfuggire qualcosa, anche se ciò non dovrebbe mai accadere.

PHP metta a disposizione diverse funzioni per fare la sanitizzazione, la validazione e l’escaping dei dati. In particolare, per quanto riguarda il pericolo di SQL injection, è buona norma, oggi, per quanto riguarda l’uso di database Mysql, utilizzare una connessione PDO. Questo tipo di connessione, riduce fortemente, fino a eliminare quasi del tutto, il pericolo di sql injection. Quasi del tutto, perché il sistema di connessione tramite PDO comunque potrebbe venire aggirato, come viene spiegato qui.

Ciò detto, per una questione di sicurezza, è sempre opportuno sanitizzare e validare i dati prima di inserirli nel database. Soprattutto quando questi dati vengono inseriti dagli utenti che navigano sul sito web. In particolare mi riferisco ai dati ottenuti tramite le variabili $_GET, $_POST, $_REQUEST. Bisogna sempre considerare i dati inviati tramite queste variabili, come unsafe, cioè come non sicuri.

PHP per la sanitizzazione e la validazione dei dati, ci viene in aiuto con le funzioni filter_input e filter_var, che dispongono di diversi flag, utili per filtrarli e validarli. Per un elenco esaustivo, consultare la pagina dei type of filters.

L’escaping dei dati, è altresì importante, e si fa sull’output, e cioè sui dati ottenuti attraverso una query e stampati a video. La funzione più utilizzata per fare l’escaping dell’output, sono htmlspecialchars e urlencode che codificano una serie di caratteri speciali, i quali possono essere sfruttati per le varie tecniche di cracking  dei siti web (e in particolare le azioni xss).

Validazione, sanitizzazione ed escaping su WordPress

WordPress, offre una serie di funzioni per le attività di validazione, sanitizzazione ed escaping dell’output. E’ inutile dire che gli sviluppatori WordPress consigliano altamente di utilizzarli quando si progettano temi e plugin. Qualora poi si volessero passare delle variabili tramite un form, WordPress mette a disposizione pure un sistema di validazione della pagina che limita (ma potrebbe non impedire) quelle tecniche malevoli che sfruttano i form per creare, per esempio, azioni xss.

Infine, al di là degli accorgimenti tecnici che possono essere utilizzati in fase di sviluppo di un codice php e che rispondono, notoriamente, alle regole di buona pratica, è necessario comunque ricordare che è sempre opportuno che il gestore del sito web provveda periodicamente a fare un backup completo del proprio sito, ciò per evitare le conseguenze immediate di un’eventuale violazione, quali ad esempio la perdita definitiva dei dati (articoli, pagine, utenti ecc.).

E' un post utile?01