Mastering Joomla 1.5 Extension and Framework development – 11
Nell’undicesimo capitolo del libro Mastering Joomla 1.5 Extension and Framework development parliamo di gestione degli errori, filtro dei dati in ingresso, controllo degli accessi, e di come gestire gli attacchi al nostro sito.
Scopriamo i punti più interessanti.
Gestione degli errori
E’ possibile usare le tipologie di errori offerte dalla classe JError (“Error”, “Warning”, “Notice”) oppure crearne di nuove.
Per ciascuna di queste tipologie di errore è possibile definire un comportamento personalizzato: ignorarli, mostrare un messaggio di sistema, mostrare una pagina di errore specifica, terminare l’applicazione.
Filtro dei dati
E’ buona norma filtrare i dati di ingresso utilizzando sempre la classe JRequest anzichè accedere direttamente alle variabili $_POST, $_GET e simili.
Esistono inoltre parametri aggiuntivi per impostare direttamente il tipo di variabile che ci si aspetta, ad esempio:
$id = JRequest::getInt( 'id' )
accetta solo un intero come valore. Possiamo anche passare un valore di default nel caso in cui la variabile richiesta non sia stata valorizzata:
$id = JRequest::getInt( 'id', 0 )
imposta $id a 0 se non è stato passato nella richiesta http.
Controllo degli accessi
I permessi in Joomla potrebbero essere assegnati in maniera molto più granulare; infatti, l’implementazione delle ACL in Joomla 1.5 è solo un sottoinsieme della classe phpGACL, che offre molte opzioni avanzate.
Possiamo sfruttare queste opzioni usando due metodi aggiuntivi:
- JFactory::getAcl ci permette di aveere accesso all’oggetto ACL e quindi a definire delle regole di accesso aggiuntive; tipicamente tali regole vanno aggiunte come prima operazione nella nostra applicazione
- $user->authorize ci permette se l’utente corrente è abilitato a una certa operazione, basandosi sulle regole precedentemte specificate
Attacchi
La maggior parte degli attacchi vengono rivolti alle estensioni presenti su un sito Joomla, dato che è più facile che siano scritte in maniera non adeguata.
Come sviluppatori, dobbiamo sempre tenere presente alcune procedure di base:
- utilizzare JHTML::_(‘form.token’) nelle nostre form per assicurarci che i dati provengano da una corretta compilazione delle form
- evitare PHP injection utilizzando sempre degli elenchi di classi o comandi abilitati
- evitare SQL injection utilizzando JDatabase::Quote e/o getEscaped e anche in questo caso utilizzando degli elenchi di possibili valori accettati
Nell’ultima parte del capitolo viene inoltre mostrato come realizzare un plugin che registri e avverta via e-mail gli amministratori in caso di rilevamento di attacchi comuni.