Pulire l'input: un tipo di attacco estremamente velenoso si chiama sql injection, e che consiste nel manipolare i parametri di un programma per inserirvi codice malevolo.
Il programma legge un dato dall'input, e lo utilizza per interrogare il database; manipolando il parametro possiamo fregare il programma e fargli eseguire del codice. Ed è qui che il programmatore deve intervenire: è appunto responsabilità del programmatore, e non del firewall, quello di validare l'input.
Facciamo un esemipo: Quindi, se trovi codice di questo tipo:
$input = JFactory::getApplication()->input; (oppure JRequest se il codice è giurassico).
$db->query('select id from #__users where username like "'.$input->get('login','raw').'"');
a questo punto l'utente malevolo potrebbe semplicemente passare una combinazione che interrompe il comando in corso e lo fa seguire da un altro, e arrivare a prendere così il controllo dell'intero sito (e girano addirittura programmi che semplificano questa operazione).
Quindi per risolvere: 1. validazione del framework:
$input->get('login')
e 2. escape:
$db->query('select id from #__users where username like '.$db->quote($input->get('login')));
(nota come puoi fare a meno delle virgolette)
Nota: naturalmente la maggior parte dei componenti firewall per joomla svolgono questo compito, quindi puoi risolvere anche con un componente oppure usando mod_security o altro approccio lato webserver.