Una de las alternativas nos permite habilitar el filtro XSS que por defecto viene deshabilitado, para ello nos vamos a application/config/config.php, y buscamos la lÃnea:
$config['global_xss_filtering'] = FALSE;
y la cambiamos por:
$config['global_xss_filtering'] = TRUE;
De esa manera se aplicarÃa el filtro XSS a todo lo que pase por POST/COOKIE.
Si no se desea usar el filtro global, podemos ir filtrando los datos cada vez que los vayamos a usar (pasando TRUE como segundo parámetro):
$this->input->post('mi_campo', TRUE);- Todo lo que viene de la base de datos, también deberÃa ser filtrado antes de imprimirlo en pantalla, CI nos facilita una sencilla función para convertir caracteres HTML a sus entidades correspondientes, haciendo uso de htmlspecialchars y permitiendonos filtrar un array entero con un sólo llamado:
/**
* Returns HTML escaped variable
*
* @access public
* @param mixed
* @return mixed
*/
if ( ! function_exists('html_escape'))
{
function html_escape($var)
{
if (is_array($var))
{
return array_map('html_escape', $var);
}
else
{
return htmlspecialchars($var, ENT_QUOTES, config_item('charset'));
}
}
}
html_escape esta disponible para ser usada en cualquier momento.
ejemplo de uso:
$var = '<script>alert(1)</script>';
echo html_escape($var).' - ';
$var = array('<script>alert(1)</script>','<b>hola</b>');
print_r(html_escape($var));
otro ejemplo:
function get_data(){
$this->db->query('SELECT mi_campo FROM mi_tabla LIMIT 1');
if ($query->num_rows()>0) {
$row = $query->row_array();
return html_escape($row['mi_campo']);
}else{
return false;
}
}

- Los comentarios están siendo moderados y serán publicados en la brevedad posible.