back to top

CodeIgniter: gestione degli errori e sicurezza

Il framework CodeIgniter permette di gestire gli errori all’interno delle proprie applicazioni grazie ad alcune funzioni messe a disposizione nativamente dalla piattaforma; inoltre, è disponibile una classe per il logging degli errori che consente di salvare le notifiche di errore e i messaggi prodotti dal debugging all’interno di file di testo.

Come impostazione predefinita, CodeIgniter mostra gli errori prodotti dalle applicazioni; questo setaggio può essere modificato passando il valore "0" alla funzione error_reporting() posizionata all’inizio del file "index.php". Disabilitare la visualizzazione degli errori non impedirà la scrittura degli stessi all’interno dei file di log.

Le funzioni disponibile per la gestione degli errori sono le seguenti:

show_error(‘messaggio’ [, int $status_code= 500 ] ). Si tratta di una funzione che ha il compito di permettere la visualizzazione degli errori; le modalità di visualizzazione sono stabilite attraverso un template che si trova sul percorso:

system/application/errors/error_general.php
Il parametro $status_code non è obbligatorio, ma può essere utilizzato per determinare lo status HTTP che verrà associato all’errore inviato al browser.

show_404(‘pagina’). Si tratta di una funzione che presiede alla visualizzazione del messaggio di errore corrispondente allo status 404 ("File not found"); la tipologia di notifica è stabilita attraverso un template che si trova sul seguente percorso

system/application/errors/error_404.php
La funzione produce la notifica di un errore nel caso in cui non sia visualizzabile la pagina che le viene passata come argomento; il framework è comunque impostatato per restituire un messaggio di errore 404 nel caso in cui il tentativo di caricamento di un Controller non abbia successo.

log_message(‘livello’, ‘messaggio’) – Si tratta di una funzione che permette di scrivere dei messaggi all’interno dei logs degli errori; la voce "livello" prevista come parametro, serve per indicare il tipo di notifica che si desidera scrivere, a questo scopo sono previsti tre livelli: debug, error e info; il seguente esempio chiarirà le differenze tra i tre livelli previsti anche attraverso i commenti:

// Livelli per la notifica degli errori
$pippo = 0; 
if ($pippo != 0)
{
  // il livello error indica l'errore corrente
  log_message('error', 'Valore inaspettato per la variabile.');
}
else
{
  // il livello debug espone notifiche utili per lo sviluppatore 
  log_message('debug', 'La variabile deve avere valore 0');
}

// il livello info fornisce informazioni su un processo
log_message('info', 'Errore relativo ad una variabile.');
CodeIgniter è stato sviluppato anche con un occhio attento alla sicurezza, per esempio si dimostra altamente restrittivo nei confronti dei caratteri utilizzabili per la generazione delle URI, in questo caso infatti è permesso utilizzare nelle stringhe soltanto i caratteri: "~" (tilde), "." (punto fermo), ":" (due punti), "_" (underscore), "-" (dash o trattino) nonché, naturalmente, i comuni caratteri alfanumerici.

Per quanto riguarda i dati inviati per metodo, è importante sottolineare che GET viene automaticamente disabilitato quando si utilizzano le URL segmentate al posto di quelle basate sulle querystring; ciò avviene perché CodeIgniter impedisce già in fase di inizializzazione la generazione dell’array globale $_GET; ciò non avviene per quanto riguarda le globali $_POST e $_COOKIE e in pratica si può dire che il trattamento dei parametri di input da parte del framework simuli del tutto una configurazione di PHP con direttiva register_globals impostata su OFF.

CodeIgniter è fornito di un filtro nativo contro gli attacchi di tipo XSS (Cross Site Scripting), esso impedisce quindi in numerosi casi che nelle pagine di un sito venga eseguito del codice Javascript malevolo così come blocca i tentativi di hijacking dei cookies; per utilizzare questo filtro è sufficiente una semplce chiamata:

// Utilizzo del filtro contro gli XSS
$data = $this->input->xss_clean($data);
Il filtro per gli XSS potrà essere attivato globalmente per il contenuto degli array $_POST e $_COOKIE impostando su TRUE il valore della variabile $config[‘global_xss_filtering’] dal file che si trova sul percorso:
system/application/config/config.php

Pubblicitร 
Claudio Garau
Claudio Garau
Web developer, programmatore, Database Administrator, Linux Admin, docente e copywriter specializzato in contenuti sulle tecnologie orientate a Web, mobile, Cybersecurity e Digital Marketing per sviluppatori, PA e imprese.